ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C/C++ tmpnam(3), tmpfile(3)
    C,C++ & Linux 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

    책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)

    '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

    댓글

Designed by Tistory.