1. 输出缓冲区
在linux系统上,一个进程默认打开三个文件:
标准输入stdin,
标准输出stdout,
标准输出错误stderr
2.printf()函数只是将内容写入到缓冲区,并没有直接输出
输出条件如下:
- 遇到"\n",输出
- 进程结束,输出
- 主动刷新 fflush(stdout);输出
- 缓冲区满时,输出
3、exit()和_exit()的区别
exit() | 会刷新缓冲区的内容,会执行atexit注册的方法 |
---|---|
_exit() | 不会刷新缓冲区的内容,直接结束进程,不会执行atexit注册的方法 |
注意:
atexit注册多个函数(最多32个函数),进程结束时,按照出栈的顺序进行调用。
例如:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void Func1()
{
printf("func1 start\n");
}
void Func2()
{
printf("func2 start\n");
}
int main()
{
atexit(Func1);
atexit(Func2);
printf("main start\n");
sleep(5);
printf("main end\n");
exit(0);
}
结果: