printf复习 --- 文件缓冲区问题

工作中遇到的一个问题,bug再现如下:

为什么printf没有输出?为什么有了\n 就能输出了?



printf \n是换行符,换行时会清空行缓存。或者手动flush  stdout。



那么缓存是什么,为什么有缓存?

参考博客: http://blog.csdn.net/zhangxuechao_/article/details/45076367   linux文件缓冲区

       上面博客解释了什么是为什么要用缓存区。缓存区的分类有: 完全缓冲和行缓冲(我觉得缓存和缓冲一个意思)

linux设备都对应一个文件,stdout是标准输出设备,是带有行缓冲的,而printf \n 会清空行缓存。再入上博客所说,行缓冲的大小是1024,所以1025的时候就会输出到stdout,对应的是屏幕设备。


参考博客 : http://blog.csdn.net/bullbat/article/details/7306178  Linux中什么是缓存,什么是块缓存,什么是页缓存。


那么在编程中,有哪些是带缓冲区的文件操作,有哪些是不带缓冲区的文件操作?

参考博客: http://blog.csdn.net/tanqiuwei/article/details/20641965

带缓冲区的文件操作是高级操作,比如fopen()

不带缓冲区的文件操作是低级操作,比如open()

应该尽可能使用带缓冲区的高级操作,同时编程时注意缓冲区,如何刷新。


那么我们如何设置缓冲区?

参考博客: http://blog.csdn.net/zhoubl668/article/details/7076324


参考博客:http://blog.csdn.net/farsightliuht/article/details/8190221    这个总结很好。



猜你喜欢

转载自blog.csdn.net/u014132659/article/details/60764446
今日推荐