c中的fclose函数,如果你为文件处理程序调用fclose,为什么fread()可以工作但不能fwrite()

sea*_*ean 0 c file-io concept

为什么我们使用fread()读取文件并且不包含fclose来关闭相同的文件引用但仍然有效.

但是如果我们忘了在fwrite之后包含fclose那么它就不起作用了.没有写入文件反映出来.

Kei*_*son 5

fread()顾名思义,它从文件中读取数据.从逻辑上讲,它不能返回,直到它实际读取数据(存储在您提供的缓冲区中)或报告错误.只要fread()回报,你可以使用这些数据.

fwrite()另一方面,可以在C运行时库,OS和其他地方进行多层缓冲.fwrite()在处理数据并将其写入某处时返回.在您刷新它(fflush(outfile);)或关闭它(fclose(outfile);)之前,无法保证它实际写入物理文件.只要fwrite()回报,你可以做你与你传递给它(它被复制)的数据一样,但仅此而已,你可以假设.

如果程序正常终止,它将隐式关闭(并因此刷新)所有打开的输出文件.如果您的程序异常终止,则可能不会发生这种情况.

(实际上,我认为在某些情况下,即使在fclose()或之后,数据也可能无法实际到达文件中fflush().)