我正在使用一个带FILE *
的API并使用它在内存中创建数据缓冲区:
std::shared_ptr<FILE> f(tmpfile(), fclose);
write_to_file(f.get());
rewind(f.get());
auto data = make_file_buffer(f.get());
return data;
这可行,但比写入内存缓冲区慢。
是否可以将其写入内存文件并避免读/写到磁盘(如stdin / stdout / stderr读/写控制台)?
注意:我使用的是Linux,因此可以访问Linux和POSIX API。
答案 0 :(得分:18)
是的,这是可能的,请参阅fmemopen。
答案 1 :(得分:2)
我在上面写了一条评论,但我会把它充实为答案。
由于您的API需要FILE句柄,因此最简单的方法是在内存文件系统上创建文件,例如在Linux上使用ramfs或tmpfs挂载的内容。
默认情况下,在/ dev / shm下的大多数Linux系统上都创建了其中一个,因此在其下创建任何文件仍将作为实际文件存在,但仅存在于内存中。当然,如果重新启动,文件的内容将丢失。我也不认为它可以被分页到磁盘,所以尽量避免写大文件,否则你会占用你内存中的所有空间。