Scroll to navigation

mkstemp(3) Library Functions Manual mkstemp(3)

ИМЯ

mkstemp, mkostemp, mkstemps, mkostemps - создаёт временный файл с уникальным именем

БИБЛИОТЕКА

Стандартная библиотека языка C (libc, -lc)

СИНТАКСИС

#include <stdlib.h>
int mkstemp(char *template);
int mkostemp(char *template, int flags);
int mkstemps(char *template, int suffixlen);
int mkostemps(char *template, int suffixlen, int flags);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

mkstemp():


_XOPEN_SOURCE >= 500
|| /* glibc >= 2.12: */ _POSIX_C_SOURCE >= 200809L
|| /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

mkostemp():


_GNU_SOURCE

mkstemps():


/* glibc >= 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

mkostemps():


_GNU_SOURCE

ОПИСАНИЕ

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

Последние шесть символов template должны быть равны "XXXXXX", они будут заменены на строку, которая сделает имя файла уникальным. Так как template будет меняться, он должна быть объявлен не строковой константой, а массивом символов.

Файл создается с правами 0600, то есть читать и записывать в него может только владелец. Возвращаемый дескриптор файла предоставляет доступ к файлу как на чтение, так и на запись. Файл открывается с помощью open(2) с флагом O_EXCL, что гарантирует, что вызывающий является процессом, создавшим файл.

The mkostemp() function is like mkstemp(), with the difference that the following bits—with the same meaning as for open(2)—may be specified in flags: O_APPEND, O_CLOEXEC, and O_SYNC. Note that when creating the file, mkostemp() includes the values O_RDWR, O_CREAT, and O_EXCL in the flags argument given to open(2); including these values in the flags argument given to mkostemp() is unnecessary, and produces errors on some systems.

Функция mkstemps() похожа на mkstemp(), за исключением строки в template, которая содержит символы суффикса suffixlen. Таким образом, template будет приобретать вид prefixXXXXXXsuffix, а строка XXXXXX будет меняться так же, как и для mkstemp().

Функция mkostemps() является аналогом mkstemps(), подобно как mkostemp() является аналогом mkstemp().

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

On success, these functions return the file descriptor of the temporary file. On error, -1 is returned, and errno is set to indicate the error.

ОШИБКИ

Невозможно создать уникальное имя временного файла. Содержимое template теперь не определено.
Для mkstemp() и mkostemp(): последние шесть символов template не равны XXXXXX. template не изменён.
Для mkstemps() и mkostemps(): количество символов template меньше, чем (6 + suffixlen) или последние 6 символов до суффикса в template не равны XXXXXX.

Данные функции также могут завершиться ошибками, описанными в open(2).

ВЕРСИИ

mkostemp() впервые появилась в glibc 2.7. mkstemps() и mkostemps() доступны в glibc с версии 2.11.

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).

Интерфейс Атрибут Значение
mkstemp(), mkostemp(), mkstemps(), mkostemps() Безвредность в нитях MT-Safe

СТАНДАРТЫ

mkstemp(): 4.3BSD, POSIX.1-2001.

mkstemps() не стандартизована, однако может присутствовать на некоторых системах.

mkostemp() и mkstemp(): являются расширениями glibc.

ПРИМЕЧАНИЯ

В версиях glibc 2.06 и ниже файл создавался с правами 0666, то есть читать и записывать в него могли все пользователи. Это старое поведение может быть небезопасным, особенно когда в других UNIX используются права 0600, и кто-то может не заметить это отличие при переносе программы. В POSIX.1-2008 добавлено требование, что файл должен создаваться с правами 0600.

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

СМОТРИТЕ ТАКЖЕ

mkdtemp(3), mktemp(3), tempnam(3), tmpfile(3), tmpnam(3)

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) aereiae <aereiae@gmail.com>, Alexey <a.chepugov@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, ITriskTI <ITriskTI@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Малянов Евгений Викторович <maljanow@outlook.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.

5 февраля 2023 г. Справочные страницы Linux 6.03