Создать уникальное имя для временного файла, временный каталог или файл
#include <stdlib.h>char * mktemp( char *template );char * mkdtemp( char *template );int mkstemp( char *template );
/tmp/temp.XXXX
.libc
Функции mktemp() / mkstemp() берёт заданный шаблон имени файла и перезаписывает его часть для создания имени файла. Функция mkdtemp() берёт заданный шаблон имени каталога и перезаписывает его часть для создания имени каталога. Имя файла / каталога является уникальным и подходит для использования приложением. Хвост шаблона заменяется текущим номером процесса и/или уникальной комбинацией букв. Количество уникальных имён, которые может вернуть любая из функций, зависит от количества предоставленных символов X. Например, если будет указано шесть X, будет проверено примерно 26⁶ комбинаций.
Функция mktemp() не создаёт новых объектов в файловой системе. Результатом её работы является лишь символьная строка.
Функция mkstemp() создаёт файл по шаблону с правами доступа 0600
(т.е. чтение-запись для владельца) и возвращает дескриптор файла, открытый для чтения и записи. Это позволяет избежать гонки между проверкой существования файла и его открытием для использования.
Функция mkdtemp() создаёт каталог по шаблону с правами доступа 0700
(т.е. чтение-запись-поиск для владельца) и возвращает имя созданного каталога. Это позволяет избежать гонки между проверкой существования каталога и его созданием для использования.
ЗОСРВ
«Нейтрино»
редакции 2024
Эта функция также может установить 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 системной библиотеки