Как я могу создать временный файл для записи в C++ на платформе Linux?

11
задан J Miller 1 October 2008 в 22:08
поделиться

7 ответов

Пользуйтесь одной из стандартной библиотеки "mktemp" функции: mktemp/mkstemp/mkstemps/mkdtemp.

Править: плоскость mktemp может быть небезопасной - mkstemp, предпочтен.

18
ответ дан 3 December 2019 в 04:15
поделиться

tmpnam (), или что-либо, что дает Вам имя, будет уязвимым для условий состязания. Используйте что-то, разработал с этой целью, который возвращает дескриптор, такой как tmpfile ():

   #include <stdio.h>

   FILE *tmpfile(void);
7
ответ дан 3 December 2019 в 04:15
поделиться

человек tmpfile

tmpfile () функция открывает уникальный временный файл в двоичном чтении-записи (w+b) режим. Файл будет автоматически удален, когда он будет закрыт или программа terminates.ote

0
ответ дан 3 December 2019 в 04:15
поделиться

mktemp должен работать или иначе заставить одно из большого количества доступных библиотек генерировать UUID.

0
ответ дан 3 December 2019 в 04:15
поделиться

Необходимо просто проверить, существует ли файл, в который Вы пытаетесь записать уже. Это - проблема блокировки. Файлы также имеют владельцев поэтому, если Вы делаете, это исправляется, неправильный процесс не сможет записать в него.

-2
ответ дан 3 December 2019 в 04:15
поделиться

tmpnam () функция в стандартной библиотеке C разработан для решения просто этой проблемы. Существует также tmpfile (), который возвращает открытый дескриптор файла (и автоматически удаляет его, когда Вы закрываете его).

0
ответ дан 3 December 2019 в 04:15
поделиться

В руководстве GNU libc обсуждаются различные доступные варианты и их предостережения:

http://www.gnu.org/s/libc/manual/html_node/Temporary-Files.html

Короче говоря, следует использовать только mkstemp () или tmpfile (), как уже упоминалось другими.

2
ответ дан 3 December 2019 в 04:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: