exit()函数,_exit()函数,_EXIT()函数 和atexit函数

(1)exit()  _exit() _Exit()

  #include <stdlib.h>:   void exit( int status );   void _Exit( int status );
  #include <unistd.h>:    void _exit( int status );


在图1中可以看出:这三个函数⽤用于正常终⽌止⼀一个程序,_exit和_Exit⽴立即进⼊入内核,而exit则要先做⼀一些清理⼯工作(调⽤用执⾏行各终⽌止处理程序,刷新所有输出流,关闭所有标准I/O流),再进⼊入内核。三个函数所带的整型参数称为终⽌止状态或退出状态。

 下面写个小代码测试一下:

  利用printf函数的行缓存方式,遇到“\n”换行符自动从缓存区读出记录

 测试exit函数: 测试结果:

  分析:由于exit会刷新输出流,所以第二个printf的内容会显示

       

 测试_exit()函数同理_Exit函数 测试结果:

分析:_exit()函数不会输出第二个printf的内容

   


atexit()函数:

      如果需要在main退出后再执行一段代码,可以使用atexit()函数注册一个函数。
 atexit()函数介绍:
函数原型:int atexit( void (*fun)( void ) );
头文件:#include<stdlib.h>
功能: 注册终止函数(即main执行结束后调用的函数)
注意:按照ISO C的规定,一个进程中最多可以用atexit()注册32个处理函数,这些函数将由exit自动调用。atexit()注册的函数类型应为不接受任何参数的void函数,exit调用这些注册函数的顺序与它们 注册时候的顺序相反,也即最先注册的最后调用,最后注册的最先调用。同一个函数如若登记多次,则也会被调用多次。


当调用fork时,子进程继承父进程注册的atexit;

当atexit注册的函数中有一个没有正常返回或被kill,则后续的注册函数都不会被执行;



代码演示:

#include<stdio.h>
#include<stdlib.h>
void fun1()
{
	printf("this is fun1\n");
}
void fun2()
{
	printf("this is fun2\n");
}
void fun3()
{
	printf("this is fun3\n");
}
int main()
{
	atexit(fun1);
	atexit(fun2);
	atexit(fun3);
	return 0;
}

结果:

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值