文件缓冲区测试实例及总结

声明:这篇笔记是我去年写的,当时参考了网友的博客,现在想不起来是哪篇了。如有侵权请告知,我会及时修改,谢谢。

  “Talk is cheap, show me the code",so,先来一个例子吧。

#include<stdio.h>
int main(void)
{
	int i;
	for(i=1 ; i <= 1024 ; i++)
	{
		printf("%c",'a');
	}
	while(1);
	return 0;
}
  编译并运行该程序,发现并没有任何输出。printf("%c",'a');这句话难道没有执行吗,打印的a去哪儿了啊?别着急,把上述代码段中的1024改为1025,运行后,程序输出了一大串a。为什么呢?

  执行完for(i=1 ; i <= 1024 ; i++)这一句时,程序没有输出任何数据,因为系统把1024个字符写进输出缓冲区,缓冲区刚好写满,但是没有换行符'\n',数据躺在了缓冲区里,并没有被送到标准输出,所以没有在屏幕上打印任何数据;

  执行完for(i=1 ; i <= 1025 ; i++)这一句时,程序输出了1024个字符,因为当把第1025个字符放进缓冲区的时候,缓冲区恰好满了,把前面的1024个字符从缓冲区"挤"到了标准输出,即打印到了屏幕上。此时,第1025个字符孤零零的躺在了缓冲区。数据在缓冲区是“前赴后继”的。

  以下是我对文件缓冲机制的总结:

       1.对文件的操作有带缓冲区和不带缓冲区之分,带缓冲区的分为全缓冲和行缓冲。

       2.对文件的读写为什么要使用缓冲机制?
        如果没有缓冲区,每当进行文件的读写操作时,都会调用一次系统调用,从进程空间切换到内核空间,程序会进行上下文的切换,会浪费时间。如果对文件的操作比较频繁,则会大大降低对文件操作的效率。 

       3.什么是全缓冲?
       全缓冲,就是当数据填满整个缓冲区时,才会执行读写的系统调用,典型值为8192个字节。

       4.什么是行缓冲?
       当遇到换行符或者填满整个行时,才会执行读写的系统调用,典型值为1024个字节。

       5.还有哪些方式可以将缓冲区的数据同步到磁盘文件?
       fclose(fp),在关闭文件之前,会把缓冲区的数据同步到磁盘文件;

       fflush(fp),强制刷新缓冲区。

  综上所述:执行文件的写操作之后,不能保证把数据成功的,及时的写入到指定的文件,因为系统只是将数据暂时写入了文件缓冲区!



  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值