详细的缓冲区介绍请看这篇文章,非常详细
https://www.cnblogs.com/lanhaicode/p/10575049.html
全缓冲:当缓冲区被填满以后才进行真正的输入输出操作
行缓冲:当在输入或者输出的过程中遇到换行符时,才执行真正的输入输出操作
无缓冲:没有缓冲区,立即进行输入输出
实际上printf是行缓冲,如果printf("hello")
而不加上\n
是不会出现结果的(之前在fork()的时候遇到这个问题)
但为什么我们直接看结果是会出现的呢?
原因是标准输出在程序正常退出的时候,会调用 fclose(stdout),而 fclose 函数会调用 fflush。因此,如果你的程序提前崩溃了,那是看不到缓冲区中的内容打印到控制台上的。特别注意的是,exit(正常退出)的话会输出,exit在调用系统_exit 之前,首先调用退出处理函数,刷新I/O缓冲,关闭文件描述符,最后调用_exit 退出进程;_exit(立即终止进程)不会输出缓冲区。
待补充内容:fork试验下printf失效的原理(jyy某一课
https://blog.csdn.net/takashi77/article/details/108077328