C fputc错误处理?

SSi*_*ht3 2 c error-handling file

fputc的大多数C文件编写示例使用一个非常基本的示例,几乎没有错误检查过程.

我应该使用哪些错误检查技术和函数与fputc循环一起确保fputc已成功写入文件?我应该如何使用它们?

我特别要求fputc的原因是我正在使用双向链表.

R..*_*R.. 6

检查返回值fputc通常不会告诉你任何有用的东西,并会使你的代码变得可怕.很少有意义的返回值的原因是因为缓冲了 stdio文件,并且写入错误(通常是由于耗尽磁盘空间,但也可能是由于硬件故障导致无法正常处理的硬件故障)直到刷新缓冲区.因此,即使报告错误,也无法知道成功提交到磁盘的数量.

因此,我的观点是,如果您在写入期间发生任何错误时愿意将整个"保存"操作视为失败,则只应使用stdio来编写文件.如果采用这种方法,则可以完全忽略所有写入函数的返回值.这是因为stdio FILE保持内部错误指示符可访问ferror(f).因此,只需执行所有写操作而不检查任何错误,然后在关闭文件之前检查ferror(f).如果它返回非零值,则表示您的"保存"操作失败,您可以将此报告给用户和remove部分写入的文件.请记住,您应首先写入临时文件,然后将rename其写入到位,而不是直接在旧文件的顶部写入,除非您希望冒失败时破坏用户旧数据的风险.