文件缓冲区

示例

 

看这段代码的结果:

为什么只有系统调用接口write可以输出呢?这个答案与文件缓冲区有很大的关系。 

原理

每种编程语言都有自己的文件操作接口,以c语言为例:

fprintf() printf fwrite等等c接口,在操作完成后都会将数据放到c语言自己维护的缓冲区中,只有在一定条件下(后面说)才会刷新缓冲区到操作系统的缓冲区,最后由操作系统传给硬件设备,例如磁盘,显示器等。

所以刚才的代码里最后一行,直接将stdout关闭,直接将操作系统缓冲区刷新到硬件设备,而c语言自己的缓冲区由于之前未刷新到操作系统缓冲区,关闭直接就找不到操作系统的缓冲区了,更别提将数据传输到硬件设备上了。

缓冲区什么时候刷新?

缓冲区的刷新分为三种:

无缓冲——直接刷新

行缓冲——直到碰到\n才刷新(显示器)

全缓冲——缓冲区满了才刷新(写文件)

当进程退出时也会刷新缓冲区。

为什么要有缓冲区?

提高效率,将多个数据放到缓冲区一起传输会比单个数据多次传输效率高。就好像快递都是一车一车运送的,而不是一个包裹一个包裹运送的。

配合格式化,当我们向显示器打

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值