TMPNAM(3S)
НАЗВАНИЕ
tmpnam, tempnam - создание имен временных файлов
СИНТАКСИС
#include <stdio.h>
char *tmpnam (s)
char *s;
char *tempnam (dir, pfx)
char *dir, *pfx;
ОПИСАНИЕ
С помощью этих функций создаются имена, которые можно
без опасений использовать для именования временных файлов.
Функция tmpnam всегда образует имя файла, используя
маршрутный префикс, определяемый константой P_tmpdir во
включаемом файле <stdio.h>. Если указатель s пустой
(равен NULL), то функция помещает результат во внутреннюю статическую область и возвращает адрес этой области. При следующем вызове tmpnam содержимое статической
области изменится. Если s не равно NULL, то его значение рассматривается как адрес массива длины не менее
L_tmpnam байт, где L_tmpnam - константа, определенная в
<stdio.h>; функция помещает результат в этот массив и
возвращает s.
Функция tempnam дает пользователю возможность выбирать
каталог. Аргумент dir указывает на имя каталога, в котором нужно создать файл. Если dir равен NULL или ссылается на цепочку символов, не являющуюся именем подходящего каталога, то имя строится с использованием константы P_tmpdir. Если и этот каталог недоступен, в качестве последнего шанса будет использован /tmp. Указанная последовательность действий игнорируется, если определена переменная окружения TMPDIR; именно ее значение задает имя каталога временных файлов.
Во многих случаях предпочтительны имена файлов, начинающиеся определенной последовательностью символов. Для
создания таких имен предусмотрен аргумент pfx. Этот аргумент может иметь значение NULL или быть ссылкой на
цепочку длиной до 5 символов, которая должна использоваться в качестве первых символов имени временного файла.
Функция tempnam вызывает функцию malloc(3C) для получения области памяти под конструируемое имя, и возвращает
ссылку на эту область. Таким образом, значение указателя, возвращаемого функцией tempnam, может служить аргументом функции free [см. malloc(3C)]. Если tempnam по
каким-либо причинам не может возвратить ожидаемый результат (например, неудачно завершилась функция malloc
или не удалось найти подходящий каталог), то возвращается пустой указатель.
ПРИМЕЧАНИЯ
При каждом обращении эти функции создают новое имя.
Файлы, созданные с помощью описанных функций и функций
fopen(3S) или creat(2), являются временными только в
том смысле, что они хранятся в каталоге, предназначенном для временного использования, и их имена уникальны.
Для удаления этих файлов, когда в них отпала необходимость, пользователь должен применить системный вызов
unlink(2).
СМ. ТАКЖЕ
creat(2), unlink(2), fopen(3S), malloc(3C), mktemp(3C),
tmpfile(3S).
ОГРАНИЧЕНИЯ
При вызове более 17576 раз в одном процессе эти функции
начнут циклически выдавать уже созданные ранее имена.
В промежутке между образованием имени файла и его открытием другой процесс может создать файл с тем же именем. Этого никогда не случится, если упомянутый "другой" процесс создает файл с помощью описываемых функций
или функции mktemp, а имена файлов выбираются так, чтобы дублирование по другим причинам было маловероятным.