gpt4 book ai didi

c - 哪些事件会导致 ferror 返回非零值?

转载 作者:太空狗 更新时间:2023-10-29 15:32:32 26 4
gpt4 key购买 nike

哪些事件会导致 ferror() 返回非零值?在哪些事件发生后应该检查 ferror()

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

打开、阅读、关闭?

ferror() 的返回值会自动改变吗?例如,如果程序检查 ferror(stream),在不与 stream 关联的 FILE 对象交互的情况下小睡一下,然后检查 ferror(stream) 再次,返回值会有所不同吗?

是否有任何标准强制要求?

最佳答案

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

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

The value EOF is returned if the end of input is reached before either the first successful conversion or a matching failure occurs. EOF is also returned if a read error occurs, in which case the error indicator for the stream (see ferror(3)) is set, and errno is set indicate the error.

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


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

ferror() 实际上只是检查文件的 _flags 字段中的 _IO_ERR_SEEN 位。 grep 该常量将向您显示它被设置/清除的所有位置。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com