本期介绍🍖
主要介绍:什么是文件缓冲区,文件缓冲区存在的意义是什么,文件缓冲区的证明👀。
一、什么是文件缓冲区
每一个正在使用的文件,操作系统都会为其在内存中开辟一块区域,称之为:文件缓冲区。每当我们想从内存向硬盘中输出数据,都会先将数据输送到缓冲区中,然后装满缓冲区后才一起输送到硬盘上。如果想从硬盘向计算机内读入数据,则会先将读到的数据输送到缓冲区中,装满缓冲区后再逐个将数据输送到程序数据区(内存中的变量)。如下图所示:
注意:文件缓冲区的大小是由C语言编译系统来决定的。
二、文件缓冲区存在的意义
文件缓冲区就是:读写文件时数据传输过程的一个中间环节。那有人就要问了:内存中的数据难道不因该是直接输出到外存上去的吗,为什么中间还需要多一层文件缓冲区?那文件缓冲区存在的目的是什么呀?为什么文件缓冲区需要装满后再输送?
先问大家一个问题:当我们用fwrite()
这样的函数写数据时,难道真的光靠它就能将数据直接扔到文件里去了吗? 当然不是,像fwrite()
这样的函数是要进行系统调用后才能将数据最终写到文件中去(所谓系统调用就是:由操作系统来代替我们去做一些事情,譬如代替我们写文件之类的)。既然我们在写数据的过程中,会让操作系统调用接口来替我们做一些事情,那么写数据这个操作就必然会打断操作系统。如果频繁的写数据,就譬如4个字节写一次,4个字节写一次,那么操作系统必然会被频繁的打断。操作系统啥事都不用干了,天天来服务你一个就够了!!!这是不现实的。
所以为了不会因为频繁的操作而打断操作系统,我们会在内存中另外开辟一块空间,用于存放需要传输的数据,直到缓冲区被放满,再由操作系统一次性全部输送到硬盘中去。可以这么理解:文件缓冲区在写文件的时候提高整个操作系统的效率,在读文件的时候提高了程序的效率。
三、证明文件缓冲区的存在
下面让我们一起来看一个函数,证明文件缓冲区是真实存在的。代码如下:
#include<stdio.h>
#include<Windows.h>
int main()
{
FILE* pf = fopen("test.txt", "w");
fputs("abcdef", pf);//先将代码放在输出缓冲区
printf("睡眠10秒——已经写数据了,打开test.txt文件,发现文件没有内容\n");
Sleep(10000);
printf("刷新缓冲区\n");
fflush(pf);//刷新缓冲区时,才将缓冲区中的数据写到文件中去
printf("睡眠10秒——此时再次打开test.txt文件,文件中有内容了\n");
Sleep(1000);
fclose(pf);
pf = NULL;
return 0;
}
注意:flose()
在关闭文件的时候也会刷新缓冲区。
这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。