2015-03-12 5 views
0

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

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

ответ

3

Возможность сделать это OS-специфический, так как соответствующая функция POSIX вызывает весь результат в генерируемой ссылке. Linux, в частности, разрешил, начиная с версии 3.11, использование O_TMPFILE в аргументе flagsopen(2), чтобы создать анонимный файл в данном каталоге.

+0

Похоже, что 'O_TMPFILE' фактически используется под капотом, если доступно, для лучшей реализации' tmpfile (3) '(упомянутый в моем ответе). –

1

Есть несколько POSIX API, в вашем распоряжении:

  • mkstemp - генерирует уникальное имя временного файл из шаблона, создает и открывает файл и возвращает открытый файл дескриптор файл.
  • tmpfile - открывает уникальный временный файл в двоичном формате режим чтения/записи (w + b). Файл будет автоматически удален, если будет закрыт или программа завершится.

Обе эти функции do создают файлы в файловой системе. Создание inode неизбежно, если вы хотите использовать реальный файл.

Первый дает вам дескриптор файла для создания системы низкого уровня вызовов, как read и write. Второй дает вам FILE* для всех API-интерфейсов <stdio.h>.

Если вам не нужен/нужен файл на диске, вы должны рассмотреть memory stream APIs, предоставленный POSIX.1-2008.

  • open_memstream() - открывает поток для записи в буфер. Буфер динамически распределяется (как с malloc(3)), и автоматически растет по мере необходимости.
1

libtmpfilefd : create a temporary unnamed file, кажется FULLFILL ваши требования

Глядя на source file эта функция создает временный файл с mkstemp затем разъединить файл сразу после

+0

'' Эта библиотечная функция является частью Netpbm (1). "... о которой я даже не слышал. Кажется, что довольно * тяжелое * решение должно связываться с этим «инструментарием для манипуляции графическими изображениями» только для создания временных файлов. Рассмотрите это как -1 без фактического downvote. –

+0

@JonathonReinhart: Это один из тех древних инструментов, которые никто не нуждался в течение нескольких десятилетий. –

Смежные вопросы