임시 파일 생성하기

C++:
임시 파일 생성하기

How to: (어떻게 하나요?)

#include <cstdio>
#include <filesystem>

int main() {
    // 임시 파일 생성
    char temp_name[] = "tempfile-XXXXXX"; // XXXXXX 부분이 고유한 문자열로 대체됩니다.
    int file_descriptor = mkstemp(temp_name);
    
    if (file_descriptor != -1) {
        // 성공 메시지 출력
        printf("임시 파일이 생성되었습니다: %s\n", temp_name);
        
        // 파일 사용 후 제거
        std::filesystem::remove(temp_name);
    } else {
        // 에러 메시지 출력
        perror("임시 파일을 생성할 수 없습니다");
    }
    return 0;
}

출력 예제:

임시 파일이 생성되었습니다: tempfile-1b2e34

Deep Dive (심층 분석)

임시 파일은 자동 삭제가 필요 없는 경우에 주로 사용됩니다. 과거에는 주로 tmpnam 또는 tempnam 함수를 사용했지만, 이런 함수들은 보안 문제로 권장되지 않습니다. C++17 부터는 <filesystem> 라이브러리의 std::filesystem::temp_directory_path함수를 통해 현재 시스템의 임시 디렉토리 경로를 얻을 수 있으며 이를 활용해 파일 경로를 생성할 수도 있습니다.

POSIX 시스템에서는 mkstemp 함수가 자주 쓰이며 고유한 파일명을 생성하고 해당 파일을 안전하게 열 수 있습니다. 파일이 열렸다면 반환된 파일 디스크립터를 통해 안전하게 파일 I/O 작업을 할 수 있습니다. 고유한 파일명 생성이 보안상 중요한 이유는 누군가가 예측 가능한 이름을 알고 있다면, 파일 생성 전에 미리 그 이름을 사용해 악의적인 공격을 할 수 있기 때문입니다.

<cstdio> 라이브러리는 C 기반 함수를 제공하며, C++에서는 이 라이브러리를 이용해서도 파일 작업을 할 수 있습니다. 하지만 C++은 자체 파일 핸들링 기능을 더 많이 제공하니, 여러분의 프로젝트 요구사항에 맞춰 적합한 방식을 선택하세요.

See Also (참고 자료)