LINUX.ORG.RU

Можно ли сделать фиктивный файл с произвольным доступом в буффер памяти вместо диска.

 


0

2

Или как обмануть библиотеку и подсунуть ей буфер вместо файла.

Есть библиотека, менять код которой, по условиям задачи не следует. По указанному ей пути она открывает файл для произвольного доступа на запись (использует fseek() и всё такое). Существуют ли какие-нибудь средства, дающие возможность сделать фиктивный файл, отображаемый в адресном пространстве файловой системы, но по сути являющимся буфером в памяти, что бы можно было передать путь к нему библиотеке и получать её вывод без использования реального файлового ввода вывода на диск? mkfifo() отметается, т.к. позволяет только последовательный доступ, pipe() и fmemopen() не имеют файловых имён.

★★★

Ответ на: комментарий от normann

А менять и не надо. Монтируется в нужный пустой каталог и всё.

Если и это не годится, озвучь конечную цель, без этого непонятно, какие ограничения.

CrX ★★★
()
Последнее исправление: CrX (всего исправлений: 1)

можно ещё подменить системные (и библиотечные) вызовы через LDPRELOAD; в open() - если запрашивается доступ к требуемому файлу то отдаёшь левый дескриптор и подменяешь к нему все прочие write() seek(), close() на работу в буфере

MKuznetsov ★★★★★
()

А какова цель-то? Избежать дискового IO, или что?

Так,

  • ln на файл в tmpfs
  • ln на /dev/null в некоторых случаях (в зависимости от того какие вызовы делает библиотека и проверяет ли что вернул fseek, например)
  • подмена open через LD_PRELOAD
slovazap ★★★★★
()

я проверял, сейчас на С такое несделать, только на Rust можно, он уже в ядре живет

передать путь к нему библиотеке и получать её вывод без использования реального файлового ввода вывода на диск

а чо, tmpfs на localhost отменили уже?

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 5)