文件指针
在C语言中,文件的所有操作都必须依靠文件指针完成。要想对文件进行读写操作,首先必须将文件与文件指针建立联系,然后通过文件指针操作相应的文件。
文件指针的定义格式如下:
FILE *变量名;
上述格式中,FILE是由系统声明的定义文件指针的结构体,用于保存文件相关信息,如文件名、文件位置、文件大小、文件状态等。不同的系统环境或不同编译器环境下FILE结构体的定义略有差异,下面是标准C语言的FILE结构体定义。
typedef struct {
short level; //缓冲区满或空的程度
unsigned flags; //文件状态标志
char fd; //文件描述符
unsigned char hold; //若无缓冲区不读取字符
short bsize; //缓冲区大小
unsigned char *buffer; //数据传送缓冲区位置
unsigned char *curp; //当前读写位置
unsigned istemp; //临时文件指示
short token; //无效检测
}FILE; //结构体类型名 FILE
当定义一个文件指针时,系统根据FILE结构体分配一段内存空间作为文件信息区,用于存储要读写文件的相应信息。例如,定义文件指针fp,示例代码如下:
FILE * fp;
上述代码定义了文件指针fp,它指向文件信息区,但此时,fp尚未关联任何文件,因此文件信息区未保存任何文件信息。
文件指针通过fopen()函数关联文件,fopen()函数用于打开文件,示例代码如下:
fp=fopen("a.txt");
上述代码中,通过fopen()函数将文件指针fp与a.txt文件关联起来,a.txt文件的信息(文件名、文件大小、文件位置、文件状态等)就会保存到fp指向的文件信息区,通过文件指针fp就可以操作a.txt文件了。文件指针fp、文件信息区、a.txt文件的关系如图1所示。
图1 文件指针fp、文件信息区、a.txt文件的关系
fopen()函数将在11.2.1节详细讲解,在这里,读者只需要知道,文件指针与文件进行关联是通过fopen()函数实现的即可。
一个文件指针变量只能指向一个文件,不能指向多个文件,也就是说,如果有n个文件,应定义n个文件指针变量,将其分别关联不同的文件,如图2所示。
图2 多个文件指针变量指向不同的文件
从图2可以看出,文件指针变量fp1、fp2、fp3分别指向了文件f1、f2和f3的信息区。为方便起见,通常将这种关联文件的指针变量称为指向文件的指针变量,或简称为文件指针。