关于<stdio.h>中feof()函数的问题

一、原型

1. 在头文件stdio.h中有如下宏定义(gcc):

#define feof(__F)     ((__F)->_flag & _IOEOF)
#define _IOEOF    0x0010 /* EOF reached on read */

2. 原型声明:

_CRTIMP int __cdecl__MINGW_NOTHROW       feof (FILE*);

3.FILE结构体定义:

typedef struct _iobuf
{
          char*     _ptr;
          int   _cnt;
          char*     _base;
          int   _flag;
          int   _file;
          int   _charbuf;
          int   _bufsiz;
          char*     _tmpfname;
} FILE;

二、分析

    函数feof()的关键代码为:return( pFile->_flag & 00010000 )。此处不关注宏定义。

    函数feof()的实现,最重要的变量是FILE结构体中的_flag成员。

    二进制文件没有所谓的文件结束标志,读取时,当文件指针指向文件尾时(由操作系统判定),_flag的第4位会被置1,feof()返回非零值。究竟是由谁在执行这个置位操作,目前作者没有探究出来。

    文本格式的文件是否有文件结束标志,未曾探究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值