std::tmpfile

From cppreference.com
< cpp‎ | io‎ | c
 
 
Input/output library
I/O manipulators
C-style I/O
Buffers
(deprecated in C++98)
Streams
Abstractions
File I/O
String I/O
Array I/O
(deprecated in C++98)
(deprecated in C++98)
(deprecated in C++98)
Synchronized Output
Types
Error category interface
(C++11)
 
 
Defined in header <cstdio>
std::FILE* tmpfile();

Creates and opens a temporary file with a unique auto-generated filename.

The file is opened as a binary file for update (as by std::fopen with access mode "wb+"). At least TMP_MAX files may be opened during the lifetime of a program (this limit may be shared with std::tmpnam and may be further limited by FOPEN_MAX).

If the program closes the file, e.g. by executing std::fclose, the file is automatically deleted.

If the program terminates normally (by calling std::exit, returning from main, etc), all files that were opened by calling std::tmpfile are also automatically deleted.

If the program terminates abnormally, it is implementation-defined if these temporary files are deleted.

Parameters

(none)

Return value

The associated file stream or NULL if an error has occurred

Notes

On some implementations (e.g. Linux), this function actually creates, opens, and immediately deletes the file from the file system: as long as an open file descriptor to a deleted file is held by a program, the file exists, but since it was deleted, its name does not appear in any directory, so that no other process can open it. Once the file descriptor is closed, the space occupied by the file is reclaimed by the filesystem.

On some implementations (e.g. Windows), elevated privileges are required as the function may create the temporary file in a system directory.

Example

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <filesystem>
namespace fs = std::filesystem;
 
int main()
{
    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';
}

Possible output:

Hello
"/tmp/tmpfBlY1lI (deleted)"

See also

returns a unique filename
(function)
returns a directory suitable for temporary files
(function)