我正在使用一些类似以下内容的旧代码:

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和其他一些Linux上使用)具有它,但据我所知它在OSX或* BSD上不可用,当然在Windows上也不可用。

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

10-11 22:10
查看更多