c - 将 FILE* 结构映射到缓冲区?

标签 c file buffer

我正在处理一些遗留代码,它使用了类似这样的东西:

void store_data(FILE *file);

但是,我不想将数据存储在磁盘上,我想将其存储在内存中(char *buf)。我可以编辑所有代码,但代码会到处跳转,并且 fwrite 会在整个文件上被调用。那么有没有更简单的方法,例如我可以将 FILE* 对象映射到(自动增长的)缓冲区? 我事先不知道数据的总大小。

解决方案必须是可移植的。

最佳答案

仅使用 C 标准中提供的工具无法做到这一点。最接近的是

FILE *scratch = tmpfile();
...
store_data(scratch);
...
/* after you're completely done calling the legacy code */
rewind(scratch);
buf = read_into_memory_buffer(scratch);
fclose(scratch);

这确实会影响磁盘,至少有可能,但我认为如果您需要广泛的可移植性并且不能修改“遗留代码”,这是您最好的选择。

在 POSIX.1-2008 中,有 open_memstream ,这正是你想要的;然而,这一 POSIX 修订版尚未被广泛采用。 GNU libc(用于 Linux 和其他一些软件)有它,但据我所知,它在 OSX 或 *BSD 上不可用,当然在 Windows 上也不可用。

关于c - 将 FILE* 结构映射到缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9401613/

相关文章:

c - 为什么我的程序 "creating index"不起作用?

c++ - 当其文件夹为只读且文件不是时,文件属性为只读

c - 可靠地以56K逐字节读取linux中的串行数据

c++ - 在 SSBO 中发送 uvec4 数组

javascript - 如何在一个 blob 中使用多个 arrayBuffer?

c++ - 有什么方法不需要在 Xcode 中使用文件的完整路径? [C/C++]

在Eclipse中编译C程序

c - Arduino 上的交互式交通灯

php - 无法使用fopen或php_serial.class.php写入/dev/ttyUSB0

android - 位图转文件android 6.0