Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Программные интерфейсы общего назначения > Системные библиотеки > Системные библиотеки > Системная библиотека > M > mktemp(), mkdtemp(), mkstemp()



mktemp(), mkdtemp(), mkstemp()

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

Прототип:

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

Аргументы:

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

Библиотека:

libc

Описание:

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

Функция mktemp() не создаёт новых объектов в файловой системе. Результатом её работы является лишь символьная строка.

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

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

Функция mkdtemp() поддерживается, начиная с ЗОСРВ «Нейтрино» редакции 2024

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

NULL
Возникла ошибка, код ошибки записан в errno. Данное значение возвращается функциями mktemp() и mkdtemp().
≠NULL
Указатель на шаблон. Данное значение возвращается функциями mktemp() и mkdtemp().
-1
Возникла ошибка, код ошибки записан в errno. Данное значение возвращается лишь функцией mkstemp().
≠-1
Дескриптор временного файла. Данное значение возвращается лишь функцией mkstemp().

Коды ошибок:

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

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

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

mktemp() и mkstemp() – POSIX 1003.1 X/Open Systems Interfaces Extension. mkdtemp() – POSIX 1003.1 (IEEE Std 1003.1-2008).

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

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

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

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

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

Для совместимости со стандартами X/Open до стандарта XPG4v2, используйте вместо mkstemp() функцию tmpfile().

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

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




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