fwrite将错误指示符放在C中的流上

Ama*_*wal 3 c

在什么情况下,函数fwrite将错误指示符放到流上,这样ferror将返回true?

具体来说,我想知道如果没有成功写入所有字节,它是否会出错.

请提供您从何处获取信息的链接.

谢谢

R..*_*R.. 5

如果发生任何错误,将设置流的错误指示符,并且clearerr在调用之前不会清除.但是,由于缓冲,stdio函数很难报告错误.通常直到稍后的调用才会看到错误,因为缓冲数据永远不会失败,但缓冲区已满后的后续写入可能会失败.如果你使用stdio来编写文件,我知道的唯一可靠的方法就是(选择一个):

  • 禁用缓冲(使用setbufsetvbuf- 这必须是在打开之后执行的第一个操作,FILE否则它具有UB)
  • 跟踪上次成功fflush并假设之后的任何数据可能只是部分写入
  • 将任何失败的写入视为完全不可恢复的文件,然后将其删除

另请注意,在POSIX系统上,如果发生错误,则fwrite需要设置(和其他stdio函数)errno以指示错误类型.就普通C而言,这些功能可能会设置errno,也可能不会.