文件指针 FILE 的底层实现
来源:互联网 发布:合肥大数据产业峰会 编辑:程序博客网 时间:2024/06/10 23:21
主要内容 :
1、FILE 类型的简介;
2、FIlE结构体的主要内容;
3、FILE内部内容详解;
FILE类型简介
相信大家对于 C语言都不是很陌生的吧!在C语言中有这么个 类型 FIlE *;
FILE类型在C语言中是用来 表示一个文件 打开后的一系列的信息;
简单的来说的话,FILE是一个结构体 ,内部的成员包含的是 一些列的文件操作时的数据;
C语言的stdio.h头文件中,定义了用于文件操作的结构体FILE。这样,我们通过fopen返回一个文件指针(指向FILE结构体的指针)来进行文件操作。
FILE结构体的内容
vs2010中对于FILE结构体的定义如下:
#ifndef _FILE_DEFINEDstruct _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、无缓冲 ;
没有缓冲区
系统的文件函数就没有缓冲区。
0 0
- 文件指针 FILE 的底层实现
- 指针的底层实现
- 智能指针的底层实现
- java处理文件上传的底层实现
- OC-底层实现isa指针
- 指针与引用的区别,指针与引用的底层实现是否一样?
- 指针与引用的区别,指针与引用的底层实现是否一样?
- 使用FILE文件指针进行文件的操作相关函数
- 文件描述符fd与文件指针FILE*的关系
- 引用与指针在底层实现研究
- 解析智能指针底层简单实现
- TCP协议实现文件上传的底层代码
- linux 文件描述符的一些底层实现
- 图的底层实现
- HashMap的底层实现
- HashMap的底层实现
- HashMap的底层实现
- 变量的底层实现
- gdb调试利器的学习
- 【Github教程】史上最全github使用方法:github入门到精通
- PHP 中 static 和 self 的区别
- 【Redis】缓冲之Redis简介
- php可逆加密函数
- 文件指针 FILE 的底层实现
- 【linux】记录一个配色方案putty
- 线性回归、梯度下降(Linear Regression、Gradient Descent)
- AWR视图
- 初识导函数——研究圆面积与周长的关系
- 练习题 No.9 01背包问题
- 【GDOI2017 day2】小学生语文题
- 优秀算法摘录
- javascript中设计模式之桥接模式详解(Bridge design)