C语言_FILE结构体的简单认识



1、文件和流的关系

C将每个文件简单地作为顺序字节流(如下图)。每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中。当打开文件时,就建立了和文件的关系。

在开始执行程序的时候,将自动打开3个文件和相关的流:标准输入流、标准输出流和标准错误。流提供了文件和程序的通信通道。例如,标准输入流使得程序可以从键盘读取数据,而标准输出流使得程序可以在屏幕上输出数据。打开一个文件将返回指向FILE结构(在stdio.h中定义)的指针,它包含用于处理文件的信息,也就是说,这个结构包含文件描述符。文件描述符是操作系统数组(打开文件列表的索引)。每个数组元素包含一个文件控制块(FCB, File Control Block),操作系统用它来管理特定的文件。


FILE结构体

C语言的stdio.h头文件中,定义了用于文件操作的结构体FILE。这样,我们通过fopen返回一个文件指针(指向FILE结构体的指针)来进行文件操作。可以在stdio.h(位于visual studio安装目录下的include文件夹下)头文件中查看FILE结构体的定义,如下:

  1. <strong>TC2.0</strong>中:  
  2. typedef struct  {  
  3.         short           level;          / fill/empty level of buffer /  
  4.         unsigned        flags;          / File status flags    /  
  5.         char            fd;             / File descriptor      /  
  6.         unsigned char   hold;           / Ungetc char if no buffer /  
  7.         short           bsize;          / Buffer size          /  
  8.         unsigned char   buffer;        / Data transfer buffer /  
  9.         unsigned char   *curp;          / Current active pointer /  
  10.         unsigned        istemp;         / Temporary file indicator /  
  11.         short           token;          / Used for validity checking /  
  12. }       FILE;                           / This is the FILE object */  
  13.   
  14.   
  15. <strong>VC6.0中</strong>:  
  16. #ifndef _FILE_DEFINED  
  17. struct _iobuf {  
  18.   
  19.     char *_ptr; //文件输入的下一个位置  
  20.      int _cnt; //当前缓冲区的相对位置  
  21.      char *_base; //指基础位置(即是文件的其始位置)   
  22.     int _flag; //文件标志  
  23.      int _file; //文件的有效性验证  
  24.      int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取  
  25.      int _bufsiz; //???这个什么意思  
  26.      char *_tmpfname; //临时文件名  
  27.         };  
  28. typedef struct _iobuf FILE;  
  29. #define _FILE_DEFINED  
  30. #endif  
<strong>TC2.0</strong>中:
typedef struct  {
        short           level;          /* fill/empty level of buffer */
        unsigned        flags;          /* File status flags    */
        char            fd;             /* File descriptor      */
        unsigned char   hold;           /* Ungetc char if no buffer */
        short           bsize;          /* Buffer size          */
        unsigned char   *buffer;        /* Data transfer buffer */
        unsigned char   *curp;          /* Current active pointer */
        unsigned        istemp;         /* Temporary file indicator */
        short           token;          /* Used for validity checking */
}       FILE;                           /* This is the FILE object */

<strong>VC6.0中</strong>:

#ifndef _FILE_DEFINED
struct _iobuf {

    char *_ptr; //文件输入的下一个位置
     int _cnt; //当前缓冲区的相对位置
     char *_base; //指基础位置(即是文件的其始位置) 
    int _flag; //文件标志
     int _file; //文件的有效性验证
     int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
     int _bufsiz; //???这个什么意思
     char *_tmpfname; //临时文件名
        };
typedef struct _iobuf FILE;
#define _FILE_DEFINED
#endif


FILE结构包含操作系统用来访问文件的低级文件描述符、文件缓存区的大小和位置、unget使用的字符缓存区,表示文件是否为临时文件的标志以及其他一些标志变量。此外,FILE指针还存储了文件指针,可以对文件中的当前位置进行跟踪记录。

系统为每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(例如文件名、文件位置等)。这些信息保存在结构类型变量中,该结构类型由系统定义,取名为FILE。(注意“FILE必须大写”)


参考:

http://yaotiaochimei.blog.51cto.com/4911337/841497

http://yaotiaochimei.blog.51cto.com/4911337/841497

http://www.cnblogs.com/haore147/p/3648395.html

转载自:https://blog.csdn.net/my_heart_/article/details/52334858

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值