TEMPNAM(3)

НАЗВАНИЕ
tempnam - создает название временного файла

СИНТАКСИС
#include <stdio.h>

char *tempnam(const char *dir, const char *pfx);

ОПИСАНИЕ
Функция tempnam() возвращает указатель на строку с корректным названием файла, который точно не существовал до вызова функции tempnam(). Имя файла будет начинаться на pfx в случае, если pfx - ненулевая строка, состоящая минимум из пяти байтов. Каталог этого файла должен быть открытым для записи и работать следующим образом: 1. Если переменная окружения TMPDIR существует и содержит название "соответствующего" каталога, то она и используется. 2. Если аргумент dir не равен NULL и является подходящим, то используется этот аргумент. 3. В остальных случаях используется P_tmpdir (как описывается в <stdio.h>). 4. Есть возможность использовать специальный каталог, зависящий от реализации.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция tempnam() возвращает указатель на уникальное название временного файла или NULL, если уникальное имя не может быть сгенерировано.

НАЙДЕННЫЕ ОШИБКИ

ENOMEM
    - ошибка при выделении области памяти.

ЗАМЕЧАНИЯ
SUSv2 не упоминает об использовании TMPDIR; glibc будет использовать его только в том случае, если у программы нет привилегий suid. SVID2 определяет, что каталог, используемый в четвертом случае, является каталогом /tmp. В SVID2 говорится, что строка, возвращаемая tempnam(), определяется вызовом malloc(3) и поэтому может быть обработана free(3).

Функция tempnam() генерирует при каждом вызове разные названия вплоть до TMP_MAX (описанного в <stdio.h>) раз. Если вызов производился более TMP_MAX раз, то дальнейшее его поведение зависит от реализации.

В случае, когда аргумент pfx имеет длину более пяти символов, то glibc будет использовать первые пять символов. При ошибках генерации уникального имени glibc вернет значение EEXIST.

НАЙДЕННЫЕ ОШИБКИ
Точное определение значения слова "соответствующий" в данном контексте не определено, так как нет способа определения доступности каталога. Никогда не используйте эту функцию. Вместо нее рекомендуется использовать mkstemp(3).

СООТВЕТСТВИЕ СТАНДАРТАМ
SVID 2, BSD 4.3

СМ. ТАКЖЕ
mktemp(3), mkstemp(3), tmpfile(3), tmpnam(3).