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



某些从流中读取和写入的操作可能会在流中设置错误标志,可以使用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

相关内容

  • 没有找到相关文章

最新更新