Пользуйтесь одной из стандартной библиотеки "mktemp" функции: mktemp/mkstemp/mkstemps/mkdtemp.
Править: плоскость mktemp может быть небезопасной - mkstemp, предпочтен.
tmpnam (), или что-либо, что дает Вам имя, будет уязвимым для условий состязания. Используйте что-то, разработал с этой целью, который возвращает дескриптор, такой как tmpfile ():
#include <stdio.h>
FILE *tmpfile(void);
человек tmpfile
tmpfile () функция открывает уникальный временный файл в двоичном чтении-записи (w+b) режим. Файл будет автоматически удален, когда он будет закрыт или программа terminates.ote
mktemp должен работать или иначе заставить одно из большого количества доступных библиотек генерировать UUID.
Необходимо просто проверить, существует ли файл, в который Вы пытаетесь записать уже. Это - проблема блокировки. Файлы также имеют владельцев поэтому, если Вы делаете, это исправляется, неправильный процесс не сможет записать в него.
tmpnam () функция в стандартной библиотеке C разработан для решения просто этой проблемы. Существует также tmpfile (), который возвращает открытый дескриптор файла (и автоматически удаляет его, когда Вы закрываете его).
В руководстве GNU libc обсуждаются различные доступные варианты и их предостережения:
http://www.gnu.org/s/libc/manual/html_node/Temporary-Files.html
Короче говоря, следует использовать только mkstemp () или tmpfile (), как уже упоминалось другими.