我正在 Linux 上编写一个简单的 C 程序,并希望使用现有库的 API,该 API 需要来自文件的数据。我必须将文件名作为 const char* 提供给它。但是我有数据,就像文件的内容一样,已经位于堆上分配的缓冲区中。有大量的 RAM,我们想要高性能。想要避免将临时文件写入磁盘,以看起来像文件的方式将数据提供给此 API 的好方法是什么?
这是我的代码的廉价假装版本:
奇妙图书馆.h:
int marvelousfunction(const char *filename);
normal-persons-usage.cpp,最初为其设计的库:
#include "marvelouslibrary.h"
int somefunction(char *somefilename)
{
return marvelousfunction(somefilename);
}
我的程序.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 函数。它只能读取一个文件。
我想到了管道和 mkfifo(),但似乎是为了在进程之间进行通信。我不是这些事情的专家。命名管道是否可以在同一进程中读取和写入?这是明智的做法吗?
或者跳过聪明,使用计划“B”,即shddup并只写一个临时文件。但是,除了获得高性能之外,我想学习一些新东西并找出在这种情况下可能发生的事情。