【C语言】exit()和_exit()的区别

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);
}

结果:
在这里插入图片描述

Guess you like

Origin blog.csdn.net/xiaoxiaoguailou/article/details/121308673