看一下下面这三种情况
1.无缓冲---直接刷新
2.行缓冲---不刷新,直到遇到\n(显示器)
3.全缓冲---缓冲区满了才刷新(文件写入)
4.进程退出的时候,也会刷新
1.解决效率问题(就比如快递公司寄快递是你和其他人的快递一起寄的)
2.配合格式化(比如:scanf键盘输入的字符串,加载到缓冲区,然后再改int等等类型)
通过上面的讲解,前面两种应该可以解决了,我就讲解第三个:
因为文件识别是文件传输,所以采用第三种全缓冲的规则,所以一直没有传输(write的系统调用级别我们就不管了)一直存储在C语言层面的缓冲区,然后fork()产生子进程,缓冲区发生写时拷贝,进程结束会自动刷新缓冲区,所以刷新了两份!
为什么说C语言具有可移植性, 就比如fopen()这个还是,在liunx中是用open系统调用的,在window是用其他系统调用函数,但语言层面都是fopen这个函数。只不过到时候选库的时候裁剪就好了。