要调用一个文件,需要有以下信息:文件当前的读写信息;与该文件对应的读写缓冲区的地址;缓冲区中未被处理的字符数;文件操作方式等。缓冲区系统为每一个文件开辟一个“文件信息区”,用来存放以上这些信息。这个信息区在内存中,是一个结构体变量。其形式为:
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 */
上面结构体的成员用来存放以上信息的数据项。对FILE的定义是在stdio.h投文件中有系统事先指定。
请注意:FILE不是结构体变量名,它是用typedef定义的新类型名。只要程序用到一个文件,系统就为此文件开辟一个如上的结构体变量。有几个文件,就开辟几个这样的结构体变量,分别用来存放各个文件的有关信息。这些结构体变量不用变量名来标识,而设置一个指向该结构体变量的指针量,通过它来访问该结构体变量。例:
FILE *fp1,*fp2;
定义文件型指针变量的一般形式为:
FILE *变量名;
标准输入输出流
#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
1.stdin
*0; //标准文件描述符;
*标准输入流;
2.stdout
*1;
*标准输出流;
3.stderr
*2;
*标准错误输出流