在什么情况下,函数 fwrite 会在流中放置一个错误指示符,以便 ferror 返回 true?
具体来说,我想知道当所有字节都没有成功写入时它是否会出错。
请提供有关您从何处获取信息的链接。
谢谢
最佳答案
如果发生任何错误,将设置流的错误指示器,并且在调用 clearerr
之前不会被清除。但是,由于缓冲,stdio 函数很难报告错误。通常直到稍后的调用才会看到错误,因为缓冲数据永远不会失败,但缓冲区已满后的后续写入可能会失败。如果您使用 stdio 写入文件,我知道的唯一可靠处理写入错误的方法是(选择一个):
- 禁用缓冲(使用
setbuf
或setvbuf
- 这必须是对FILE
执行的第一个操作打开后或有 UB) - 跟踪最后一次成功的
fflush
并假设之后的任何数据可能只是部分写入 - 将任何失败的写入视为完全不可恢复的文件并删除它
另请注意,在 POSIX 系统上,如果发生错误,fwrite
(和其他 stdio 函数)需要设置 errno
以指示错误类型。就普通 C 而言,这些函数可以设置 errno
,也可以不设置。
关于c - fwrite 将错误指示器放在 C 中的流上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5081599/