某些从流中读取和写入的操作可能会在流中设置错误标志,可以使用ferror(stream)
进行测试,虽然我很确定这一定是一个常见问题,但我无法在 SO 或一般 Web 中找到所有可能的错误原因的列表。什么可能导致设置ferror()?
特别是,我正在寻找在 Minix 3 上的标准输入上执行 fgets() 时出错的可能原因,但我也在寻找更通用的列表。
没有任何可能的错误的简单列表。 但是,根据您正在读取或写入的设备,问题可能包括:
- 设备故障(短路、过热、年老死亡等)
- 设备已从机器中拉出(U 盘)
- 设备已关闭或断电(外部磁盘驱动器)
- 设备弹出(光盘)
- 网络连接丢失(SAN、NAS)
- 设备已满(没有空间用于写入)
- 。
流上可能导致设置 ferror() 的错误条件是什么?
以下几种可能性之一:尝试错误的方向 I/O 操作会设置错误指示器。
#include <stdio.h>
int main(void) {
FILE *f = fopen("t", "w");
if (f) {
int ch = fgetc(f);
printf("ch %dn", ch);
printf("Error %dn", ferror(f));
printf("EOF %dn", feof(f));
fclose(f);
}
}
输出
ch -1
Error 1
EOF 0