FILE *fp
所有平台的名字都是FILE,FILE是一个结构体类型,里面的成员实现的功能一致,但
是不同平台成员的名字不一样。
typedef struct _IO_FILE FILE;
声明FILE结构体类型的信息包含在stdio.h头文件中
为了统一,便于移植,所有平台都用typedef定义成FILE
例如
typedef struct{
short level; //缓冲区“满”或者空的程度
unsigned flags; //文件状态标志
char fd; //文件描述符 文件描述符范围为 0 ~ 1024 其中0,1,2被占用了
unsigned char hold; // 如无缓冲区不读取字符
short bsize; //缓冲区大小
unsigned char *buffer; //数组缓冲区的位置
unsigned ar; //指针, 当前的指向
unsigned istemp;// 临时文件 ,指示器
short token; // 用于有效性的检查
}FILE;
有三个已经定义好的标准文件指针:
标准输入 stdin 从键盘输入
标准输出 stdout 打印在屏幕
标准出错 stderr 打印在屏幕
自己定义的文件指针不能与这些已经定义好的标准文件指针重名
需要注意以下几点:
1.fp指针,只要调用了fopen(),就会在堆区分配空间,把地址返回给fp
2.fp指针实际上并不是直接指向文件,fp指针和文件关联,fp内部成员保存了文件的相关信息,真正相关的是里面的成员变量文件描述符
3.操作fp指针,不能直接操作,必须通过文件库函数来操作fp指针
4.通过库函数操作fp指针,对文件的任何操作,fp里面的成员会有相应的变化(系统自动完成),不需要人来完成很多非常复杂的操作