tmpnam - создаёт имя для временного файла
tmpnam(3)
создаёт имя для временного файла
Other Alias
tmpnam_r
ОБЗОР
#include <stdio.h>
char *tmpnam(char *s);
ОПИСАНИЕ
Примечание: Избегайте использования
tmpnam(); используйте вместо неё
mkstemp(3) или
tmpfile(3).
Функция tmpnam() возвращает указатель на строку, содержащую корректное
имя файла, и гарантирует, что файла с таким именем не существует на момент
вызова, и наивный программист может считать это имя самым подходящим для
временного файла. Если аргумент s равен NULL, это имя генерируется во
внутреннем статическом буфере и может быть изменено последующим вызовом
tmpnam(). Если s не равно NULL, то имя копируется в массив символов
(длиной не менее L_tmpnam), на который указывает s, и в случае
успешного выполнения возвращается значение s.
Создаваемое имя файла содержит префикс каталога P_tmpdir (L_tmpnam и
P_tmpdir определены в <stdio.h> так же, как и TMP_MAX,
описанная ниже).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция
tmpnam() возвращает указатель на уникальное имя временного файла,
либо NULL, если его невозможно сгенерировать.
ОШИБКИ
Ошибок не предполагается.
АТРИБУТЫ
Описание терминов данного раздела смотрите в
attributes(7).
Интерфейс Атрибут Значение
tmpnam()
безвредность в потоках: небезопасно (MT-Unsafe race:tmpnam/s!)
tmpnam_r()
безвредность в потоках: безвредно (MT-Safe)
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, 4.3BSD, C89, C99, POSIX.1-2001. В POSIX.1-2008 функция
tmpnam()
отмечена как устаревшая.
ЗАМЕЧАНИЯ
Функция
tmpnam() генерирует уникальное имя каждый раз, до
TMP_MAX
вызовов. Если она будет вызвана более чем
TMP_MAX раз, то дальнейшее
поведение определяется конкретной реализацией.
Хотя tmpnam() генерирует имена, которые трудно подобрать, тем не менее,
есть вероятность, что за промежуток времени, когда tmpnam() вернёт имя
файла и программа откроет его, другая программа успеет создать с помощью
open(2) файл с таким же именем или символическую ссылку, что может
привести к проблемам с безопасностью. Чтобы исключить подобную вероятность,
для открытия файла используйте open(2) с флагом O_EXCL. А ещё лучше —
воспользуйтесь mkstemp(3) или tmpfile(3).
Если определён _POSIX_THREADS или _POSIX_THREAD_SAFE_FUNCTIONS, то в
переносимых приложениях с нитями нельзя вызывать tmpnam() с аргументом
NULL.
В черновике POSIX предлагается использовать функцию tmpnam_r(),
определённую как
char *
tmpnam_r(char *s)
{
return s ? tmpnam(s) : NULL;
}
с предупреждением не использовать NULL. В некоторых системах это
реализовано. Чтобы получить прототип этой функции в glibc из
<stdio.h>, определите _SVID_SOURCE или _BSD_SOURCE (до
включения любых заголовочных файлов).
ДЕФЕКТЫ
Никогда не используйте эту функцию. Вместо неё используйте
mkstemp(3) или
tmpfile(3).