哪些事件可以导致ferror()
返回非零值,并且在哪些事件之后应该检查ferror()
?
http://www.cplusplus.com/reference/cstdio/ferror/
打开,阅读,关闭?ferror()
的返回值会自发改变吗?例如,如果某个程序检查ferror(stream)
,在不与FILE
关联的stream
对象进行交互的情况下小睡,然后再次检查ferror(stream)
,返回值是否会有所不同?
标准是否规定了其中任何一项?
最佳答案
主要是从基础系统调用返回的错误(例如read
,write
,lseek
,close
)将导致流的错误位被设置。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/