mktemp()

Создать уникальный временный файл

Прототип:

#include <stdlib.h>
char * mktemp( char *template );

Аргументы:

template
Шаблон имени файла, который необходимо использовать. Этот шаблон может быть любым именем файла с добавленным к нему некоторым количеством символов X, например, /tmp/temp.XXXX.

Библиотека:

libc

Описание:

Функция mktemp() берёт заданный шаблон имени файла и перезаписывает его часть для создания имени файла. Это имя файла является уникальным и подходит для использования приложением. Хвост в конце заменяется текущим номером процесса и/или уникальной комбинацией букв. Количество уникальных имён файлов, которые может вернуть mktemp(), зависит от количества предоставленных символов X. Например, если будет указано шесть X, mktemp() проверит примерно 26⁶ комбинаций.

Функция mkstemp() (в отличие от этой функции) создаёт файл шаблона, права доступа 0600 (т.е. чтение-запись для владельца), и возвращает дескриптор файла, открытый для чтения и записи. Это позволяет избежать гонки между проверкой существования файла и его открытием для использования.

Возвращаемое значение:

NULL
Возникла ошибка. Код ошибки записан в errno.
≠NULL
Указатель на шаблон.

Коды ошибок:

ENOTDIR
Часть пути шаблона не является существующим каталогом.

Эта функция также может установить errno в любое значение, заданное функцией stat().

Классификация:

POSIX 1003.1 X/Open Systems Interfaces Extension

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

Вообще говоря, следует избегать использования mktemp(), потому что вредоносный процесс может использовать состояние гонки в промежутке времени между созданием временного имени файла с помощью mktemp() и использованием временного имени вызывающей стороной. Вместо этого используйте mkstemp().

Эта функция может создавать только 26 уникальных имен файлов на поток для каждого уникального шаблона.

Тематические ссылки:

chmod(). getpid(). mkstemp(), open() stat(). tmpfile(), tmpnam()




Предыдущий раздел: Описание API системной библиотеки