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

标签 c

在什么情况下,函数 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/

相关文章:

C:使用任何 GPU 进行并行计算

java - float 与双

在c程序中调用codegen matlab生成的.dll文件

c - 关于c中的rand()

c - C#line 指令的用例

c - 如何将recv()接收到的二进制数据写入文件

c - 如何使 'make' 在 Windows 7 上与 mingw32 一起工作

c - 在 C 中添加到链表的前面

C - 控制到达非空函数的结尾

c - 执行 ps aux | 的程序grep 根 | wc -l 在 C 中使用管道