Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C 언어 tmpfile() 함수 완벽 정리 – 임시 파일 생성과 자동 삭제

C 언어의 tmpfile() 함수는 바이너리 업데이트 모드(binary update mode)로 임시 파일을 생성하는 표준 라이브러리 함수입니다. 이 함수는 stdio.h 헤더 파일에 선언되어 있으며, 임시 파일 생성에 실패하면 항상 NULL 포인터를 반환합니다.

tmpfile()로 생성된 임시 파일은 프로그램이 종료되는 순간 자동으로 삭제되기 때문에, 개발자가 별도로 파일을 지우지 않아도 된다는 큰 장점이 있습니다. 따라서 중간 계산 결과를 저장하거나 일시적으로 데이터를 보관해야 할 때 매우 유용하게 활용됩니다.

문법 (Syntax)

FILE *tmpfile(void)

반환 값 (Return Value)

임시 파일이 성공적으로 생성되면, 해당 임시 파일을 가리키는 스트림 포인터(stream pointer)를 반환합니다. 반대로 파일 생성에 실패하면 NULL 포인터가 반환되므로, 반환 값을 반드시 검사하는 것이 안전한 프로그래밍 습관입니다.

알고리즘

시작.
    문자 데이터 문자열을 담기 위해 char형 배열 변수 c[]를 선언한다.
    정수형 변수 i ← 0으로 초기화한다.
    FILE 타입의 newfile 포인터를 선언한다.
    tmpfile() 함수를 호출하여 newfile 파일 포인터를 임시 파일로 만든다.
    fopen() 함수를 호출하여 "nfile.txt" 파일을 쓰기 모드로 연다.
    if (newfile == NULL) 이면
        "임시 파일 생성 오류"를 출력한다.
        return 0.
    "임시 파일이 성공적으로 생성되었습니다"를 출력한다.
    while (c[i] != '\0') 동안
        c[]의 모든 데이터를 파일 포인터 newfile에 기록한다.
        i++.
    fclose() 함수를 호출하여 파일 포인터를 닫는다.
    fopen() 함수를 호출하여 "nfile.txt" 파일을 읽기 모드로 연다.
    rewind() 함수를 호출하여 파일 포인터의 스트림 위치를 처음으로 되돌린다.
    while (!feof(newfile)) 동안
        putchar() 함수를 호출하여 파일 포인터 newfile의 모든 데이터를 출력한다.
    fclose() 함수를 호출하여 파일 포인터를 닫는다.
종료.

예제 코드

#include <stdio.h>
int main() {
    char c[] = "Tutorials Point";
    int i = 0;
    FILE* newfile = tmpfile(); // 파일 포인터를 임시 파일로 생성
    newfile = fopen("nfile.txt", "w");
    if (newfile == NULL) {
        puts("Error in creating temporary file");
        return 0;
    }
    puts("Temporary file created successfully");
    while (c[i] != '\0') {
        fputc(c[i], newfile);
        i++;
    }
    fclose(newfile);
    newfile = fopen("nfile.txt", "r");
    rewind(newfile); // 스트림의 시작 위치로 포인터를 되돌림
    while (!feof(newfile))
    putchar(fgetc(newfile));
    fclose(newfile); // 파일 포인터 닫기
}

실행 결과

Temporary file created successfully
Tutorials Point

정리

tmpfile() 함수는 프로그램 실행 중에만 필요한 데이터를 저장할 때 유용한 도구입니다. 주요 특징은 다음과 같습니다.

  • 임시 파일은 바이너리 업데이트 모드(w+b)로 열립니다.
  • 프로그램이 정상 종료되면 임시 파일은 자동으로 삭제됩니다.
  • 생성 실패 시 NULL을 반환하므로 예외 처리가 필수입니다.