Namespaces
Variants

std:: tmpfile

From cppreference.net
< cpp ‎ | io ‎ | c
헤더 파일에 정의됨 <cstdio>
std:: FILE * tmpfile ( ) ;

고유하게 자동 생성된 파일명으로 임시 파일을 생성하고 엽니다.

파일은 업데이트를 위해 이진 파일로 열립니다( std::fopen 에서 접근 모드 "wb+" 를 사용하는 경우와 같습니다). 프로그램 수명 동안 최소 TMP_MAX 개의 파일이 열릴 수 있으며(이 제한은 std::tmpnam 과 공유될 수 있으며, FOPEN_MAX 에 의해 추가로 제한될 수 있습니다).

프로그램이 파일을 닫는 경우, 예를 들어 std::fclose 를 실행하면, 파일은 자동으로 삭제됩니다.

프로그램이 정상적으로 종료되는 경우( std::exit 호출, main 함수에서 반환 등), std::tmpfile 을 호출하여 열었던 모든 파일도 자동으로 삭제됩니다.

프로그램이 비정상적으로 종료되면, 이러한 임시 파일들이 삭제되는지 여부는 구현에 따라 정의됩니다.

목차

매개변수

(없음)

반환값

연결된 파일 스트림 또는 오류가 발생한 경우 널 포인터입니다.

참고 사항

일부 구현(예: 구형 Linux)에서는 이 함수가 실제로 파일 시스템에서 파일을 생성, 열고 즉시 삭제합니다: 삭제된 파일에 대한 열린 파일 디스크립터가 프로그램에 의해 유지되는 한 파일은 존재하지만, 삭제되었기 때문에 해당 이름은 어떤 디렉토리에도 나타나지 않아 다른 프로세스가 이를 열 수 없습니다. 파일 디스크립터가 닫히거나 프로그램이 종료(정상적 또는 비정상적)되면 파일이 차지하던 공간은 파일 시스템에 의해 회수됩니다. 최신 Linux(3.11 이후 또는 파일 시스템에 따라 다름)는 open() 시스템 콜의 특수 플래그를 통해 이러한 보이지 않는 임시 파일을 한 단계로 생성합니다.

일부 구현(예: Windows)에서는 이 함수가 시스템 디렉토리에 임시 파일을 생성할 수 있으므로 상승된 권한이 필요합니다.

예제

#include <cstdio>
#include <cstdlib>
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    std::cout << "TMP_MAX = " << TMP_MAX << '\n'
              << "FOPEN_MAX = " << FOPEN_MAX << '\n';
    std::FILE* tmpf = std::tmpfile();
    std::fputs("Hello, world", tmpf);
    std::rewind(tmpf);
    char buf[6];
    std::fgets(buf, sizeof buf, tmpf);
    std::cout << buf << '\n';
    // Linux-specific method to display the tmpfile name
    std::cout << fs::read_symlink(
                     fs::path("/proc/self/fd") / std::to_string(fileno(tmpf))
                 ) << '\n';
}

가능한 출력:

TMP_MAX = 238328
FOPEN_MAX = 16
Hello
"/tmp/tmpfBlY1lI (deleted)"

참고 항목

고유한 파일명을 반환합니다
(함수)
임시 파일에 적합한 디렉토리를 반환합니다
(함수)
C documentation for tmpfile