Pra*_*tic 5 c error-handling file-io
哪些事件会导致ferror()返回非零值,在哪些事件之后应该检查ferror()?
http://www.cplusplus.com/reference/cstdio/ferror/
打开,阅读,关闭?
的返回值ferror()会自发变化吗?例如,如果程序检查ferror(stream),在不与FILE关联的对象交互的情况下小睡一会儿stream,然后ferror(stream)再次检查,返回值是否会有所不同?
是否有任何标准强制要求?
主要是从底层系统调用(例如read、write、lseek、close)返回的错误将导致设置流的错误位。
许多f___()函数 fromstdio.h指示是否到达文件结尾,或发生错误, ferror()或feof()将指示原因。 fscanf, 例如:
EOF如果在第一次成功转换或匹配失败发生之前到达输入末尾,则返回该值。EOF如果发生读取错误,也会返回,在这种情况下,流的错误指示符(请参阅ferror(3))被设置,并且errno被设置指示错误。
函数 fromstdio.h是同步的 - 没有后台线程做任何事情,所以不,错误位(从 返回ferror())永远不会自发改变。它只会受到您的应用程序调用 libc 的影响。
对于非常好奇的人,可以克隆 GLibc Git 存储库 ( git://sourceware.org/git/glibc.git) 并查看代码本身。
ferror()本质上只是检查_IO_ERR_SEEN文件_flags字段中的位。 grep为该常量显示将向您显示它设置/清除的所有位置。