FILE:为C语言中包含在stdio.h中的对文件进行操作的一个结构体,该结构体包含有文件名、文件状态和文件当前位置等信息。

不同的编译器stdio头文件对FILE的定义略有差异,标准C中如下定义:

struct _iobuf
{
    char *_ptr; //下一个要被读取的字符的地址
    int   _cnt; //剩余的字符,如果是输入缓冲区,那么就表示缓冲区中还有多少字符未被读取
    char *_base;//缓冲区基地址
    int   _flag;//读写状态标志位
    int   _file; //文件的有效性验证
    int   _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
    int   _bufsiz; //文件的大小
    char *_tmpfname;//临时文件名
};
typedef struct _iobuf FILE;

定义文件指针的一般形式为:FILE *fp;(FILE是文件缓冲区的结构,fp是指向文件缓冲区的指针)

我们通过fopen返回一个文件指针(指向FILE结构体的指针)来进行文件操作。

打开文件:FILE *fopen(char const *name,char const *mode);

文件操作模式(mode):

    r:创建文件,进读取

    w:创建文件,以进行写入。如果文件已经存在,则删除当前内容

    a:追加,打开或创建文件以在文件尾部写入 

    r+:打开文件以进行更新(读取和写入)

    w+:创建文件以进行更新。如果文件已经存在,则删除当前内容。

    a+:追加,打开或者创建文件以进行更新,在文件尾部写入

关闭文件:int fclose(FILE *f);


缓冲区(缓存)

为什么要引入缓冲区: 

  由于计算机对缓冲区的操作大大快于对磁盘的操作,为了提高计算机的工作效率,当我们从磁盘里读取信息的的时候,先把读出的数据放在缓冲区,计算机再直接从缓冲区取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数。

定义:

  缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放CPU,使其能够高效率工作。

缓冲区的类型:

全缓冲(_IOFBF):当填满标准I/O缓存后才进行实际I/O操作 (磁盘文件)

行缓冲(_IOLBF):当在输入输出中遇到换行符时,执行真正的I/O操作。但当缓冲区被填满时,即使没有换行符也会执行实际的I/O操作。 (标准输入stdin和标准输出stdout)

不带缓冲(_IONBF):没有缓冲区,数据会立即读入或输出到外存文件或设备上。如标准出错stdeer