-
C/C++ tmpnam(3), tmpfile(3)C,C++ & Linux 2020. 5. 22. 15:33728x90
함수 기능
임시 파일을 만들어주는 함수입니다.
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
책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)'C,C++ & Linux' 카테고리의 다른 글
C/C++ exit(3) _exit(2) _Exit(2) (0) 2020.05.22 C/C++ tempnam(3) (0) 2020.05.22 C/C++ fileno(3) (0) 2020.05.22 C/C++ scanf(3), fscanf(3), sscanf(3) (0) 2020.05.22 C/C++ sprintf(3), snprintf(3) (0) 2020.05.22