什么事件会导致恐怖回归非零?

时间:2014-12-31 06:29:21

标签: c file-io error-handling

哪些事件可能导致ferror()返回非零值,并且应该在检查ferror()之后发生什么事件?

http://www.cplusplus.com/reference/cstdio/ferror/

开放,阅读,结束?

ferror()的返回值是否会自发变化?例如,如果程序检查ferror(stream),在没有与FILE相关联的stream对象进行交互的情况下小睡,然后再次检查ferror(stream),则返回值是否会有所不同?

这是否符合标准要求?

1 个答案:

答案 0 :(得分:4)

主要是从底层系统调用返回的错误(例如readwritelseekclose)将导致设置流的错误位。

来自f___()的许多stdio.h函数表示,如果达到文件结尾或发生错误,ferror()feof()将表明原因。 fscanf,例如:

  

如果之前到达输入结尾,则返回值EOF          要么是第一次成功转换,要么是匹配失败。          如果发生读取错误,也会返回EOF,在这种情况下会出现错误          设置了流的指示符(请参阅ferror(3)),并设置了errno          表明错误。

来自stdio.h的函数是同步的 - 没有后台线程做任何事情,所以不,错误位(从ferror()返回)永远不会自发地改变。它只会受到您的应用程序调用libc的影响。


对于非常好奇的人,可以克隆GLibc Git存储库(git://sourceware.org/git/glibc.git)并查看代码本身。

ferror()基本上只检查文件_IO_ERR_SEEN字段中的_flags位。 grep该常量将显示设置/清除的所有位置。