我正在处理一些遗留代码,它使用了类似这样的东西:
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/