哪些事件可以导致ferror()返回非零值,并且在哪些事件之后应该检查ferror()

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

打开,阅读,关闭?
ferror()的返回值会自发改变吗?例如,如果某个程序检查ferror(stream),在不与FILE关联的stream对象进行交互的情况下小睡,然后再次检查ferror(stream),返回值是否会有所不同?

标准是否规定了其中任何一项?

最佳答案

主要是从基础系统调用返回的错误(例如readwritelseekclose)将导致流的错误位被设置。
f___()中的许多stdio.h函数都指示,如果到达文件末尾或发生错误,则ferror()feof()将指示原因。 fscanf ,例如:


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

出于好奇,可以克隆GLibc Git存储库(git://sourceware.org/git/glibc.git)并查看代码本身。
ferror()本质上仅检查文件的_IO_ERR_SEEN字段中的_flags位。该常量的grep编码将显示所有设置/清除的位置。

关于c - 哪些事件可能导致错误返回非零值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27717132/

10-11 09:25