2

从流中读取和写入的某些操作可能会在流中设置错误标志,可以使用 进行测试ferror(stream),虽然我很确定这一定是一个常见问题,但我无法找到所有可能的列表SO或一般网络中的错误原因。什么可能导致 ferror() 被设置?

特别是,我正在寻找在 Minix 3 上对标准输入执行 fgets() 时可能导致错误的原因,但我也在寻找更通用的列表。

4

2 回答 2

2

没有任何可能的错误的简单列表。但是,根据您正在读取或写入的设备,问题可能包括:

  • 设备故障(短路、过热、老化、...)
  • 设备从机器中拔出(USB 记忆棒)
  • 设备已关闭或断电(外部磁盘驱动器)
  • 设备被弹出(CD-ROM)
  • 网络连接丢失(SAN、NAS)
  • 设备已满(没有空间可写)
  • ...
于 2012-04-12T14:20:37.640 回答
0

流上可能导致设置 ferror() 的错误条件是什么?

几种可能性之一: 尝试错误方向的 I/O 操作会设置错误指示器

#include <stdio.h>
int main(void) {
  FILE *f = fopen("t", "w");
  if (f) {
    int ch = fgetc(f);
    printf("ch %d\n", ch);
    printf("Error %d\n", ferror(f));
    printf("EOF %d\n", feof(f));
    fclose(f);
  }
}
 

输出

ch -1
Error 1
EOF 0
于 2020-11-23T21:01:26.407 回答