是否可以创建C FILE对象以在内存中读/写

时间:2013-05-29 13:51:49

标签: c++ file memory

我正在使用一个带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。

2 个答案:

答案 0 :(得分:18)

是的,这是可能的,请参阅fmemopen

答案 1 :(得分:2)

我在上面写了一条评论,但我会把它充实为答案。

由于您的API需要FILE句柄,因此最简单的方法是在内存文件系统上创建文件,例如在Linux上使用ramfs或tmpfs挂载的内容。

默认情况下,在/ dev / shm下的大多数Linux系统上都创建了其中一个,因此在其下创建任何文件仍将作为实际文件存在,但仅存在于内存中。当然,如果重新启动,文件的内容将丢失。我也不认为它可以被分页到磁盘,所以尽量避免写大文件,否则你会占用你内存中的所有空间。