是否可以在内存中创建一个C FILE对象来读/写?
Is it possible to create a C FILE object to read/write in memory
我正在使用一个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下默认创建一个这样的文件,所以在那里创建的任何文件仍然会作为一个实际的文件存在,但只存在于内存中。当然,如果重新启动,文件的内容将丢失。我也不认为它可以被分页到磁盘,所以尽量避免写大文件,否则你会占用内存中的所有空间。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- Seg Fault Issue C++ (file IO / getline)
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 是否可以跨 DLL 边界传递 FILE 对象?
- 是否可以从 file.lib 中提取对象文件
- 从 FILE* 指针创建流对象
- 在 FILE 对象上使用 fstream
- 是否可以在内存中创建一个C FILE对象来读/写?
- 在python中打开共享对象文件时出错(OSError: cannot open shared object file:
- 我可以使用FILE*来初始化c++ ostream对象吗?