主要内容 :
1、FILE 类型的简介;
2、FIlE结构体的主要内容;
3、FILE内部内容详解;
FILE类型简介
相信大家对于 C语言都不是很陌生的吧!在C语言中有这么个 类型 FIlE *;
FILE类型在C语言中是用来 表示一个文件 打开后的一系列的信息;
简单的来说的话,FILE是一个结构体 ,内部的成员包含的是 一些列的文件操作时的数据;
C语言的stdio.h头文件中,定义了用于文件操作的结构体FILE。这样,我们通过fopen返回一个文件指针(指向FILE结构体的指针)来进行文件操作。
FILE结构体的内容
vs2010中对于FILE结构体的定义如下:
#ifndef _FILE_DEFINED
struct _iobuf {
char *_ptr; //文件输入的下一个位置
int _cnt; //当前缓冲区的相对位置
char *_base; //指基础位置(即是文件的其始位置)
int _flag; //文件标志
int _file; //文件的有效性验证 也就是是进程中所说的文件的描述符fd
int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
int _bufsiz; //缓冲区 缓冲的字节个数
char *_tmpfname;//临时文件名
};
typedef struct _iobuf FILE;
#define _FILE_DEFINED
#endif
FILE内部内容详解;
1、文件描述符
对于FILE结构体中每一个成员变量都是有一定的作用的,例如 :在其中的_file 又被称作是文件描述符 。
在我们需要对文件进行操作的时候,我们只需要知道 一个文件的 文件的描述符 ,就可在硬盘上面找到文件的相关的数据,进而对文件作出相应的操作 。
文件描述符、一般是从0-N的整数中最小的且没有被使用的来表示的数来表示的。
并且 ,系统规定的 三个 标准流(LINUX下一切皆可看成是文件)中的文件描述符如下:
1、标准输入流 :stdio ---->键盘; 对应的文件描述符 0;
2、标准输出流 :stdout ---->显示器;对应的文件描述符 1;
3、标准错误流 :stderr ---->显示器;对应的文件描述符 3;
因此,一般情况下,我们每次打开的文件的文件描述符 都是从3开始向上递加的。
2、缓冲区
对于每个FILE结构体来说,内部肯定都会包含一个缓冲区的;
为什么呢?
因为每次的文件的读写操作,都不可能是写入(读出)一个字节的字符,要是每读(写)一个字节的内容,就要调用一下系统的I/O设备的额话,效率可能会低的,所以引入了缓冲区来提高效率。
缓冲区刷新的三种方式:
1、行缓冲 ;
一般的这种缓冲方式,都是遇到一个\n就要刷新一次缓冲区;这样的缓冲方式一般使用在显示器文件上 ;
这是为了满足我们的交互问题 :
我们大部分的人都会适应的是 每次读一行的,就像是 QQ聊天每次 显示的一行或者是多行的语句;
总不能半天都不刷新,突然又出现一大片的文件来 ;
2、全缓冲 ;
当缓冲区满的时候,系统就会刷新缓冲区,这种方法一般应用在文件的读写上。
3、无缓冲
;
没有缓冲区
系统的文件函数就没有缓冲区。