C,C++ & Linux
C/C++ tmpnam(3), tmpfile(3)
KyooDong
2020. 5. 22. 15:33
728x90
함수 기능
임시 파일을 만들어주는 함수입니다.
tmpnam() 함수는 buf 가 NULL 일 경우에 내부 버퍼를 이용하여 파일명을 저장한 뒤 그 주소를 리턴합니다.
NULL 이 아닌 경우에는 최대 길이 L_tmpnam 인 문자열을 buf 에 넣어줍니다.
tmpnam() 함수로 생성된 임시 파일은 프로세스가 종료되어도 삭제되지 않으므로 개발자가 unlink() 또는 remove() 함수로 삭제해주어야 합니다.
tmpfile() 함수로 만들어진 임시 파일들은 프로세스가 종료됨과 동시에 삭제됩니다.
함수 원형
#include <stdio.h>
char *tmpnam(char *buf);
FILE *tmpfile();
매개변수
buf
임시 파일의 파일명을 저장할 버퍼
NULL 일 경우 tmpnam 함수의 내부 버퍼를 사용합니다.
반환값
tmpnam()
성공 시 임시 파일의 경로를 가리키는 포인터 리턴
에러 시 NULL 리턴
tmpfile()
성공 시 임시 파일의 파일 포인터
에러 시 NULL 리턴하고 errno 설정
예제
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <memory.h>
#define MAX_LINE 4096
int main(int argc, char *argv[]) {
char buf[MAX_LINE];
char name[L_tmpnam];
FILE *fp;
// 임시 파일 생성
// tmpnam 의 인자가 NULL인 경우 시스템 버퍼를 이용하여 생성하고
// 그 이름의 주소를 리턴
printf("temp file 1 : %s\n", tmpnam(NULL));
// 임시 파일 생성2
tmpnam(name);
printf("temp file 2 : %s\n", name);
// 임시 파일 생성 3
if ((fp = tmpfile()) == NULL) {
fprintf(stderr, "tmpfile error\n");
exit(1);
}
// 임시 파일에 출력
fputs("tmpfile created temporary file.\n", fp);
fseek(fp, 0, SEEK_SET);
// 출력했던거 다시 읽어들임
if (fgets(buf, sizeof(buf), fp) == NULL) {
fprintf(stderr, "fgets error\n");
exit(1);
}
// 읽어들인것을 표준 출력에 다시 출력
fputs(buf, stdout);
exit(0);
}
결과
예제2
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <memory.h>
int main(int argc, char *argv[]) {
char buf[BUFSIZ];
char name[L_tmpnam];
FILE *fp;
// 임시 파일 생성
printf("Temporary filename <<%s>>\n", tmpnam(name));
// 임시 파일 생성 2
if ((fp = tmpfile()) == NULL) {
fprintf(stderr, "tmpfile error\n");
exit(1);
}
// 임시파일2에 문자열 출력
fputs("create tmpfile success!!\n", fp);
// 임시파일2의 오프셋 포인터를 초기화 시킴
rewind(fp);
// 임시파일2에서 한 줄 읽기
fgets(buf, sizeof(buf), fp);
// 읽은 것을 표준 출력 파일에 출력
puts(buf);
exit(0);
}
결과
리눅스시스템프로그래밍 저자 : 홍지만
https://book.naver.com/bookdb/book_detail.nhn?bid=14623672
책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)