函数名: atexit
头文件:#include<stdlib.h>
功 能: 注册终止函数
atexit函数是一个特殊的函数,它是在正常程序退出时调用,来对终止处理函数进行登记。我们把它叫为登记函数 。按照ISOC的规定,一个进程可以登记多达32个函数,这些函数的函数类型应为不接受任何参数的void函数,这些函数将由exit自动调用,函数类型应为不接受任何参数的void函数,这些函数被称为终⽌处理函数。
exit调⽤终⽌处理函数的顺序和atexit登记的顺序相反,如果⼀个函数被多次登记,也会被多次调⽤。
以下函数的调用时程序异常或者正常终止:
进程终⽌的⽅式有8种,前5种为正常终⽌,后三种为异常终⽌:
1 从main函数返回;
2 调⽤exit函数;
3 调⽤_exit或_Exit;
4 最后⼀个线程从启动例程返回;
5 最后⼀个线程调⽤pthread_exit;
6 调⽤abort函数;
7 接到⼀个信号并终⽌;
1 从main函数返回;
2 调⽤exit函数;
3 调⽤_exit或_Exit;
4 最后⼀个线程从启动例程返回;
5 最后⼀个线程调⽤pthread_exit;
6 调⽤abort函数;
7 接到⼀个信号并终⽌;
8 最后⼀个线程对取消请求做出响应。
用以下程序验证:
#include<stdio.h>
#include<stdlib.h>
void fun1()
{
printf("fun1()\n");
}
void fun2()
{
printf("fun2()\n");
}
void fun3()
{
printf("fun3()\n");
}
int main()
{
atexit(fun1);
atexit(fun2);
atexit(fun3);
atexit(fun2);
atexit(fun2);
return 0;
}
在Linux下运行:
执行结果:
通过结果,验证了之前的结论:
exit调⽤终⽌处理函数的顺序和atexit登记的顺序相反,如果⼀个函数被多次登记,也会被多次调⽤。