在同一文件上的fwrite和fprintf之间交替

时间:2014-10-26 02:47:36

标签: c file-io bin

是否可以在同一文件上交替写入二进制和常规写入?

我是否需要像这样继续打开和关闭文件?

struct node x;
FILE* fout;
fout = fopen("output.bin", "wb");
fwrite(&x, sizeof(struct node), 1, fout);
fclose(fout);
fout = fopen("output.bin", "a");
fprintf("&d", x.data);

1 个答案:

答案 0 :(得分:0)

在POSIX系统上混合:这两个都是同一个库中的缓冲stdio例程,而在POSIX(UNIX / Linux / Solaris / BSD)操作系统上,二进制和文本模式之间没有区别,所以你确实可以混合它们。

通常fprintf会在每个换行符后触发刷新,因此只要您不将fprintf/fwrite与直接write()混合,就可以了。

关于Windows:fopen支持“b”模式,确实存在差异。如果文件在文本模式下打开,则fseek将仅限于开头或当前文件指针。我不假装知道在二进制模式下使用fprintf()是否会有任何陷阱,所以我建议你检查以前的SO线程,如果你担心Windows。

Difference between files writen in binary and text mode

通常如果我需要将格式化输出与二进制混合,我首先使用sprintf()或其他内存机制写入缓冲区,然后使用fwrite()批量写入(刷新)缓冲数据。