引入

在上节讲的缓冲文件系统中,最关键的概念就是文件类型指针,简称为:文件指针。我们知道,要让程序操作一个文件,都需要将其加载到内存中,但是加载到内存之前,需要现经过缓冲区。所以,每个文件被使用时,都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息。

有关信息包括:文件名、文件状态及文件当前位置等信息

这些信息都是保存在一个结构体变量中的,该结构体类型由系统声明,取名为FILE

存放文件信息的 FILE

在不同的 C 编译环境中 FILE 的内容可能不完全相同,我们来举个例子,FLIE 的结构体可能是这样的,它包含在stdio.h中:

typedef struct {
short level;   // 缓冲区“满”或“空”的程度
unsigned flags;  //文件状态标志
char fd;   //文件描述符
unsigned char hold;   //如缓冲区无内容不读取字符
short bsize;   //缓冲区的大小
unsigned char * buffer;   //数据缓冲区的位置
unsigned char* curp;   //指针当前的指向
unsigned is temp;   //临时文件指示器
short token;   //用于有效性检查
}FILE;

我们看到 FILE 结构体的命名使用的是 typedef 然后结构体没有名称,而是在声明的最后初始化了 FILE 结构体名称。

使用 FILE 结构体

既然有了结构体名称,我们就可以声明一个 FILE 类型的结构体变量了:

FILE f1;
// 定义了一个结构体变量 f1 ,用它来存放一个文件的有关信息

上面结构体变量 f1中的信息,在系统打开文件时自动写入,不用担心。但是我们在实际使用时,一般不通过变量名来使用,而是通过指向该结构体的指针来引用。

FILE *f1;
//定义了一个FILE结构体指针变量 f1

我们可以使这个指针指向一个文件的文件信息区,通过该文件信息区就能够访问该文件了。(文件信息区是在内存中的,也是一个结构体,稍后介绍)。

也就是说,通过文件指针变量能够找到与它相关联的文件。

小提示
我们也通常称这种指向文件信息区的指针变量为文件的指针变量

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。