没有写入磁盘的C++文件

jn_*_*pdx 8 c++ file-io memorystream ios

我正在使用一个具有相当多函数的库,这些函数可以写入FILE但没有一个可以方便地将相同数据转储到内存中的对象.有没有办法创建一个FILE对象(或覆盖它),将数据存储在内存而不是写入磁盘 - 我想避免一遍又一遍地打开/写入/读取文件的性能.

更新:根据Rob的建议,尝试使用stringstream:

ss.put(c);

std::string myval = ss.str();

printf("Value: %s\n after writing: %i length %lu\n",myval.c_str(),c, myval.length());
Run Code Online (Sandbox Code Playgroud)

但是,现在试图从字符串流中获取数据(二进制)让我陷入困境 - 我如何获取我一直在添加的二进制数据?

Cub*_*bbi 10

除了已经提到的fmemopen()在POSIX中称为open_memstream的 GNU 之外,可以组合(使用MAP_ANONYMOUS)或任何其他特定于OS的函数来获得类似的解决方案,该函数将文件描述符返回到内存块,以及.mmap()fdopen()

编辑:这是错误的,mmap不会创建文件描述符.


Ern*_*ill 5

例如,GNU libc fmemopen会为您提供FILE *写入内存的功能.试试man fmemopenLinux系统了解详细信息.

我怀疑(但不确定)这fmemopen是一个包装,它协调@Cubbi提到的mmap/ fdopen方法.