[Linux]标准IO之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|
", receive);
    }
    printf("ferror: %d
", ferror(stdin));
    printf("feof: %d
", feof(stdin));
    return 0;
}

向程序输入一个空文件c33.txt,它的输出是:

[root@localhost temp]# ./c33 < ./c33.txt
ferror: 0
feof: 1

可见第一次用fgets对stdin的读取就返回了NULL指针,然后用feof函数判断的结果为真;

原文地址:https://www.cnblogs.com/yiyide266/p/13550166.html