示例
看这段代码的结果:
为什么只有系统调用接口write可以输出呢?这个答案与文件缓冲区有很大的关系。
原理
每种编程语言都有自己的文件操作接口,以c语言为例:
fprintf() printf fwrite等等c接口,在操作完成后都会将数据放到c语言自己维护的缓冲区中,只有在一定条件下(后面说)才会刷新缓冲区到操作系统的缓冲区,最后由操作系统传给硬件设备,例如磁盘,显示器等。
所以刚才的代码里最后一行,直接将stdout关闭,直接将操作系统缓冲区刷新到硬件设备,而c语言自己的缓冲区由于之前未刷新到操作系统缓冲区,关闭直接就找不到操作系统的缓冲区了,更别提将数据传输到硬件设备上了。
缓冲区什么时候刷新?
缓冲区的刷新分为三种:
无缓冲——直接刷新
行缓冲——直到碰到\n才刷新(显示器)
全缓冲——缓冲区满了才刷新(写文件)
当进程退出时也会刷新缓冲区。
为什么要有缓冲区?
提高效率,将多个数据放到缓冲区一起传输会比单个数据多次传输效率高。就好像快递都是一车一车运送的,而不是一个包裹一个包裹运送的。
配合格式化,当我们向显示器打