Функция mkstemp() создает временный файл с именем, соответствующим строке
из template. Последние шесть символов template должны
быть XXXXXX, и именно они заменяются строкой, которая делает имя файла
уникальным. Затем создается файл для чтения/записи и
уровнями доступа, равными либо 0666 (в glibc 2.0.6 и более ранних версий),
либо 0600 (в glibc 2.0.7 и более поздних версий).
Так как она будет меняться, то
template
не может быть строковой константой,
а должна быть определена как символьный массив.
Файл открывается с флагом O_EXCL, гарантирующим, что при успешном возвращении
mkstemp
мы будем единственным пользователем.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция mkstemp() возвращает описатель fd временного файла
или -1 при ошибках.
НАЙДЕННЫЕ ОШИБКИ
EINVAL
(последние шесть символов template не являлись XXXXXX.
template не меняется.);
EEXIST
(нельзя создать уникальное имя временного файла.
Содержимое template в этот момент не определено.).
ЗАМЕЧАНИЯ
Прежняя работа функции (создание файла с режимом 0666)
могла быть рискованной для системы безопасности, особенно
поскольку другие Unix-дополнения используют 0600
и некоторые могли проигнорировать эту особенность при переносе программ.
В более общем случае, спецификация POSIX ничего не говорит о режимах
файлов, так что приложение должно убедиться перед вызовом
mkstemp
в том, что его umask установлена правильно.
СООТВЕТСТВИЕ СТАНДАРТАМ
BSD 4.3, POSIX 1003.1-2001
ЗАМЕЧАНИЯ
Прототип данной функции есть в
<unistd.h>
(для libc4, libc5, glibc1); glibc2 соответствует "Single Unix Specification"
и имеет прототип в
<stdlib.h>.