2015-04-09 2 views
1

У меня есть void *buffer, являющийся экземпляром файла в ОЗУ.Файл Путь к файлу памяти

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

К сожалению, единственный способ, чтобы открыть этот тип файла через API является обеспечение API с пути файла:

sample_api_open(char *file_name, ...); 

Я понимаю, что shm_open возвращает файловый дескриптор, но API только принимает файл дорожка.

Есть ли работа, чтобы прочитать этот тип файла в памяти?

+3

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

+1

Нет стандартного способа открыть дескриптор файла в оперативную память через строку пути, не пройдя петлю, такую ​​как Unix-канал. –

+0

Это то, что я хотел в течение длительного времени - возможность делать ввод-вывод файлов в буфере памяти. Возможно, псевдо-устройство/dev/ram? –

ответ

0

Вместо использования общей памяти POSIX вы можете открыть временный файл и mmap(). Затем сделайте буфер в области mmap(), чтобы вы могли, наконец, вызвать API во временном файле.

0

Есть ли работа, чтобы прочитать этот тип файла в памяти?

Дамп содержимого буфера во временный файл на /tmp.

На подавляющем большинстве современных систем * NIX /tmp является синтетической файловой системой в памяти. Только в случае нехватки памяти содержимое может попасть на диск из-за замены.

Если объем информации слишком велик, чтобы избежать дублирования, после сброса содержимого на /tmp вы можете освободить локальную память и mmap() содержание файла.