探究C库中的FILE及system call中的文件描述符间的关系

          说到文件指针,大多数人都知道它的类型为FILE* ,但不熟悉FILE是一种怎样的结构,而对于文件描述符,它是system call 中对文件进行基本操作(open、close、write等)的一种描述,相当于C库中的文件指针,即文件描述符对应于system call,而文件指针则对应于C库;

    首先介绍一下FILE(FILE是一个结构,它包含以下成员)

   struct _iobuf{

            char *_ptr;        //文件输入的下一个位置
             int  _cnt;        //当前缓冲区的相对位置
            char *_base;       //基础位置(指文件的起始位置)
             int  _flag;       //文件标志
             int  _file;       //文件的有效性验证
             int  _charbuf;    //检查缓冲区状况,若无缓冲区则不读取
             int  _bufsiz;     //文件大小
            char *_tmpfname;   //临时文件名
            };
    typedef struct _iobuf FILE;

    我们都知道,使用库函数fopen()将返回一个指向FILE结构的指针,实际上,这个FILE结构体包含处理文件的信息,而文件描述符(一个非负整数)就是这个FILE结构体中的一个成员,即成员_file,_file是一个数组(打开文件列表)下标(索引),该数组(文件列表)的每一个元素都包含一个文件控制块(FCB),操作系统用其来管理特定的文件;

    如下图所示:

    

           因此,C库中FILE结构体中封装了system call中的文件描述符,且文件描述符起着至重要的作用;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值