文件缓冲区

ANSIC标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。
从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。
如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根据C编译系统决定的。
代码示例:

#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);//刷新缓冲区时,才将输出缓冲区的数据写到文件(磁盘)
? ? //注:fflush 在高版本的VS上不能使用了
? ? printf("再睡眠10秒-此时,再次打开test.txt文件,文件有内容了\n");
? ? Sleep(10000);
? ? fclose(pf);
? ? //注:fclose在关闭文件的时候,也会刷新缓冲区
? ? pf = NULL;
? ? return 0;
}

在这里要着重了解fflush的作用;
在刚开始运行还未到10s时,打开文件其中没有任何数据:

文件指针(重点)

缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。
这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE.
例如,VS2013编译环境提供的 stdio.h 头文件中有以下的文件类型申明:

struct _iobuf {
? ? ? ? char *_ptr;
? ? ? ? int ? _cnt;
? ? ? ? char *_base;
? ? ? ? int ? _flag;
? ? ? ? int ? _file;
? ? ? ? int ? _charbuf;
? ? ? ? int ? _bufsiz;
? ? ? ? char *_tmpfname;
? ? ? ?}; typedef struct _iobuf FILE;

不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。
每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关
心细节。
一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。
下面我们可以创建一个FILE*的指针变量:

FILE* pf;//文件指针变量

文章链接: /27488.html

文章标题:文件缓冲区

文章版权:云服务器租用科技所发布的内容,部分为原创文章,转载请注明来源,网络转载文章如有侵权请联系我们!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
建站教程

C语言文件操作

2024-2-21 17:26:22

IDC云库

什么是边缘计算?边缘计算的所有基础知识

2023-2-18 14:22:47

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧

云服务器租用科技 - 最新云主机促销服务器租用优惠

http://www.vxiaotou.com