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

Is it possible to create a C FILE object to read/write in memory

本文关键字:对象 FILE 一个 内存 创建 是否      更新时间:2023-10-16

我正在使用一个API,需要一个FILE *,并使用它在内存中创建一个数据缓冲区:

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

可以,参见fmemopen。

我在上面写了一个评论,但我将充实它作为一个答案。

因为你的API需要一个FILE句柄,最简单的方法是在内存文件系统上创建一个文件,比如Linux上用ramfs或tmpfs挂载的文件。

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