首页 > 学院 > 开发设计 > 正文

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

2019-11-08 02:19:19
字体:
来源:转载
供稿:网友

(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;}结果:

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表