ANSIC标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根据C编译系统决定的。代码示例:
intmain(){??FILE*pf=fopen("test.txt","w");??fputs("abcdef",pf);//先将代码放在输出缓冲区??printf("睡眠10秒-已经写数据了,打开test.txt文件,发现文件没有内容
");??Sleep(10000);??printf("刷新缓冲区

");??Sleep(10000);??fclose(pf);??//注:fclose在关闭文件的时候,也会刷新缓冲区??pf=NULL;??return0;}
在这里要着重了解fflush的作用;在刚开始运行还未到10s时,打开文件其中没有任何数据:
缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE.例如,VS2013编译环境提供的stdio.h头文件中有以下的文件类型申明:
struct_iobuf{char*_ptr;int?_cnt;char*_base;int?_flag;int?_file;int?_charbuf;int?_bufsiz;char*_tmpfname;};typedefstruct_iobufFILE;
不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。下面我们可以创建一个FILE*的指针变量:
本文来源:虚拟主机--文件缓冲区(文件缓冲区是什么)
本文地址:https://www.idcbaba.com/zhuji/2208.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



