[Linux]标准I\O之EOF
一、概述
无论是出错,还是文件到达了末尾(EOF),都返回常量EOF,那么要判断一个文件究竟是出错还是真正到达了文件末尾,需要调用ferror和feof两个函数:
int ferror(FILE* fp); int feof(FILE* fp);
注意:文件指针只有在经过至少一次标准I/O读写操作后才可以使用这两个函数去检测文件指针的EOF状态;
二、示例
创建一个这样的程序c33:
#include <stdio.h> #include <stdlib.h> #define BUFFSIZE 8 int main(void) { char* buff = malloc(BUFFSIZE); char* receive = NULL; while((receive = fgets(buff, BUFFSIZE, stdin)) != NULL) { printf("%s|\n", receive); } printf("ferror: %d\n", ferror(stdin)); printf("feof: %d\n", feof(stdin)); return 0; }
向程序输入一个空文件c33.txt,它的输出是:
[root@localhost temp]# ./c33 < ./c33.txt ferror: 0 feof: 1
可见第一次用fgets对stdin的读取就返回了NULL指针,然后用feof函数判断的结果为真;