Я пишу простую программу на C для Linux и хочу использовать API существующей библиотеки, которая ожидает данные из файла. Я должен указать имя файла как const char *. Но у меня есть данные, как содержимое файла, которые уже находятся в буфере, выделенном в куче. Существует много оперативной памяти, и мы хотим высокую производительность. Желая избежать записи временного файла на диск, каков хороший способ подачи данных в этот API в виде файла?
Вот дешевая притворная версия моего кода:
marvelouslibrary.h:
int marvelousfunction(const char *filename);
normal-Person-Use.cpp, для которого изначально была разработана библиотека:
#include "marvelouslibrary.h"
int somefunction(char *somefilename)
{
return marvelousfunction(somefilename);
}
myprogram.cpp:
#include "marvelouslibrary.h"
int one_of_my_routines()
{
byte* stuff = new byte[1000000];
// fill stuff[] with...stuff!
// stuff[] holds same bytes as might be found in a file
/* magic goes here: make filename referring to stuff[] */
return marvelousfunction( ??? );
}
Для ясности, marvelouslibrary не предлагает никаких функций API, которые принимают данные по указателю; он может только читать файл.
Я думал о pipe и mkfifo (), но, похоже, предназначен для связи между процессами. Я не эксперт в этих вещах. Работает ли именованный канал в порядке чтения и записи в одном и том же процессе? Это мудрый подход?
Или пропустите ум, перейдите с планом "B", который должен shuddup и просто написать временный файл. Тем не менее, я хотел бы узнать что-то новое и выяснить, что возможно в этой ситуации, помимо достижения высокой производительности.