17

我正在使用一个 APIFILE *并使用它在内存中创建一个数据缓冲区:

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。

4

2 回答 2

30

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

于 2013-05-29T13:56:32.013 回答
2

我在上面写了一条评论,但我会充实它以获得答案。

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

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

于 2013-05-29T13:56:16.303 回答