所以我知道getchar()
当输入结束或发生错误时返回 EOF。我也知道我可以通过以下方式检查发生了哪些情况ferror(stdin)
and feof(stdin)
。
我想知道什么情况下会特别发生错误。
我检查了这两个函数的手册页,但那里没有任何内容。
getchar()
可以返回EOF
针对多个系统特定的 I/O 错误。getchar()
被定义为等价于getc(stdin)
,本身相当于fgetc(stdin)
除了它可以作为宏来实现这一事实之外。以下列出了 Linux 系统的可能原因:Linux 手册页 https://man7.org/linux/man-pages/man3/fgetc.3p.html:
返回值
成功完成后,fgetc()
将返回下一个字节
来自stream指向的输入流。如果文件结尾
设置了流的指示符,或者流是否处于末尾
文件,应设置流的文件结束指示符fgetc()
将返回EOF
。如果发生读取错误,则错误
应设置流的指示器,fgetc()
将返回EOF
,
并应设置errno
以指示错误。
ERRORS
The fgetc()
如果需要读取数据并且以下情况,函数将失败:
EAGAIN
The O_NONBLOCK
为文件描述符设置标志
底层流和线程将被延迟fgetc()
手术。
EBADF
流底层的文件描述符不是有效文件
描述符打开以供读取。
EINTR
读取操作因收到
信号,并且没有传输数据。
EIO
发生物理 I/O 错误,或者进程处于
后台进程组尝试读取其
控制终端,并且调用线程是
阻塞SIGTTIN
或者该过程被忽略SIGTTIN
或者
该进程的进程组是孤立的。此错误可能
也可以出于实现定义的原因而生成。
EOVERFLOW
该文件是常规文件,并尝试读取
等于或超过与相关的最大偏移量
对应的流。
The fgetc()
如果出现以下情况,功能可能会失败:
ENOMEM
可用存储空间不足。
ENXIO
请求是由不存在的设备发出的,或者请求
超出了设备的能力。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)