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)"

Смотрите также

возвращает уникальное имя файла
(функция)
возвращает каталог, подходящий для временных файлов
(функция)