Jump to content

мкстемп


В вычислениях , mkstemp — это функция POSIX для создания временного файла ( компьютерного файла , который обычно перестает существовать, когда программа , открывшая файл, закрывает его или завершает работу). [ 1 ] Он принимает аргумент , определяющий расположение временного файла и префикс его сгенерированного имени файла. [ 1 ] После mkstemp в Единую спецификацию UNIX была добавлена ​​функция tmpnam() был признан устаревшим, [ 1 ] поскольку последнее несло риск того, что временный файл с тем же именем может быть создан другим потоком или процессом в течение времени с момента, когда вызывающая сторона получит имя временного файла и попытается его создать. [ 2 ] mkstemp не страдает от этой проблемы. [ 3 ]

Использование

[ редактировать ]

Включение

[ редактировать ]
С
#include <stdlib.h> // per IEEE Std 1003.1, 2004
#include <unistd.h> // for "legacy" systems
С++
#include <cstdlib>  // per IEEE Std 1003.1, 2004
#include <unistd.h> // for "legacy" systems

Декларация

[ редактировать ]

int mkstemp(char* template);

Требования

[ редактировать ]
  • Параметр template должен быть модифицируемым массивом символов с нулевым завершением.
  • Содержание template должен быть в формате допустимого пути к файлу с шестью символами в конце.
  • Параметр template не должен использоваться при предыдущем вызове mkstemp.

Семантика

[ редактировать ]
  • Завершающий «X» template перезаписываются для создания уникального имени результирующего временного файла.
  • В случае успеха функция сообщает действительный файловый дескриптор файлу временному ; в случае неудачи сообщает -1.

Следующий код является примером использования mkstemp; локальная переменная filename модифицируется mkstemp и будет содержать путь к новому файлу: [ 4 ]

#include <stdlib.h>

void example()
{
    char filename[] = "/tmp/prefXXXXXX";
    mkstemp(filename);
}

Условия ошибки

[ редактировать ]

Не указано, если mkstemp устанавливает errno и какие значения errno устанавливаются в случае сбоя. [ 1 ]

Механизм

[ редактировать ]

The mkstemp Функция генерирует имя файла в соответствии с предоставленным аргументом шаблона и пытается его создать. Этот процесс повторяется до тех пор, пока файл не будет успешно создан. [ 5 ] После этого он открывает файл и возвращает дескриптор файла вызывающей стороне. [ 6 ] с буфером данных , который был передан в функцию, с шаблоном, который теперь содержит новое имя файла. [ 7 ] Файл можно удалить сразу после mkstemp вызов возвращается, чтобы предотвратить его открытие другими процессами, но файл все равно можно использовать, поскольку вызывающий процесс все еще будет иметь действительный дескриптор файла. [ 5 ] Старые версии mkstemp создал файл с маской 0666, в результате чего временные файлы стали доступны для чтения и записи всем пользователям, что представляет собой уязвимость безопасности; это можно исправить, установив umask вручную перед вызовом mkstemp. [ 6 ] Более новые версии функции создают файл с маской 600, так что только владелец файла может читать и писать в него. [ 7 ]

См. также

[ редактировать ]
  1. ^ Jump up to: а б с д mkstemp от OpenGroup
  2. ^ «темнам» . Спецификации базы открытой группы (выпуск 7 изд.). Открытая группа . 2018.
  3. ^ Стивенс, В. Ричард ; Раго, Стивен А. (2013). «Стандартные библиотечные функции». Временные файлы . Аддисон-Уэсли . п. 169. ИСБН  9780321638007 . {{cite book}}: |work= игнорируется ( помогите )
  4. ^ Сикорд, Роберт К. (25 апреля 2014 г.). «Символы и строки (STR)». СТР30-С. Не пытайтесь изменять строковые литералы (2-е изд.). Аддисон-Уэсли. п. 203. ИСБН  9780133805291 . {{cite book}}: |work= игнорируется ( помогите )
  5. ^ Jump up to: а б Виега, Джон ; Мессье, Мэтт (2003). «Контроль доступа». Временные файлы в Unix . О'Рейли Медиа . п. 66. ИСБН  9780596003944 . {{cite book}}: |work= игнорируется ( помогите )
  6. ^ Jump up to: а б Чен, Хао; Дин, Дрю; Вагнер, Дэвид А. (2004). «Проверка модели на один миллион строк кода C» (PDF) . Симпозиум по безопасности сетей и распределенных систем . 4 . Интернет-сообщество . Архивировано (PDF) из оригинала 08 октября 2015 г. Проверено 18 мая 2019 г.
  7. ^ Jump up to: а б Дреппер, Ульрих (8 апреля 2009 г.). «Защитное программирование для Red Hat Enterprise Linux (и что делать, если что-то пойдет не так)» (PDF) . п. 7. S2CID   239879 . Архивировано из оригинала (PDF) 5 марта 2019 г. Проверено 18 мая 2019 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d3348351d58bfa5f9fc43cdca57757b3__1717444500
URL1:https://arc.ask3.ru/arc/aa/d3/b3/d3348351d58bfa5f9fc43cdca57757b3.html
Заголовок, (Title) документа по адресу, URL1:
mkstemp - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)