1.遇到“\n”,立即刷新缓冲区。
2.程序调用fflush函数刷新缓冲区
3.程序以exit结束,缓冲区会刷新。如果以_exit结束,缓冲区数据会被直接清空。
4.缓冲区满,也会将缓冲区数据刷新出来。
5.程序结束后,缓冲区被打印
6.输出缓冲区的大小是1024个字节
简而言之,输出缓冲区呢,时一个有头有尾的数组,遇到换行符 或者 满的时候,程序正常退出的时候,会被打印出来
#include <stdio.h>
#include<unistd.h>
int main()
{
printf("Hello world");
sleep(10);
printf("hello world\n");
return 0;
}
测试printf()的缓冲区的大小
#include <stdio.h>
#include<unistd.h>
int main()
{
for(int i = 0 ;i<1025 ;i++) //此时可以立即打印 改成1024时 不能立即打印
{
printf("a");
}
sleep(10);
return 0;
}
使用exit()在进程退出之前会做两个动作
1、调用退出处理函数
2、清理I/O缓冲
_exit() 不会进行两个动作,尽快退出程序后,才会清空缓冲区
#include <stdio.h>
#include<unistd.h>
#include<stdlib.h>
void print();
int main()
{
atexit(print);
printf("Hello world");
_exit(19);
return 0;
}
void print()
{
printf("hello world\n");
}