gpt4 book ai didi

c - fwrite 将错误指示器放在 C 中的流上

转载 作者:行者123 更新时间:2023-12-04 11:44:44 24 4
gpt4 key购买 nike

在什么情况下,函数 fwrite 会在流中放置一个错误指示符,以便 ferror 返回 true?

具体来说,我想知道当所有字节都没有成功写入时它是否会出错。

请提供有关您从何处获取信息的链接。

谢谢

最佳答案

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

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

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

关于c - fwrite 将错误指示器放在 C 中的流上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5081599/

24 4 0