1.FILE的内容
FILE在C中作为一个结构体存在结构如下:
struct _iobuf {
char *_ptr; //缓冲区指针
int _cnt;
char *_base; //缓冲区基址
int _flag; //文件读写模式
int _file; //文件描述符
int _charbuf; //缓冲区剩余自己个数
int _bufsiz; //缓冲区大小
char *_tmpfname;
};
其中FILE的缓冲区指针用来缓冲数据,_flag用来确定打开文件的权限,_file为文件描述符,0为stdin,1为stdout,2为stderror,接下来为用户文件。
2.文件描述符fd
首先明白fd与FILE的区别,FILE使用fopen,fclose,fread,fwrite操作文件,返回类型为文件指针(FILE*)。文件描述符用open()/creat()创建,成功返回类型文件描述符,失败返回-1。用read(),write()读写。下图为文件描述符的图解。
如果我们在读取文件前,close掉0,1,2三的话,即将读取的文件将放在缺少处。