返回

C语言标准IO的缓冲区介绍

详细的缓冲区介绍请看这篇文章,非常详细
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

待补充内容:常见IO的缓冲分类

Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy