在程序退出时自动清理资源-atexit

来源:互联网 发布:演唱会门票制作软件 编辑:程序博客网 时间:2024/05/21 07:14

在程序中经常出现多个需要退出程序的情况,程序退出时应当进行一些清理工作。如果有一个能够提供与程序退出方式无关的方法,来进行程序退出时的必要处理,势必可以简化编程工作。atexit()就是这样一个方法。

atexit()声明如下:

extern "C" int atexit (void (*func)(void)) noexcept;extern "C++" int atexit (void (*func)(void)) noexcept;


 

atexit的参数是一个无参数函数指针,这个函数将在程序正常退出时自动执行。

8种方式使进程终止,其中前5种为正常终止,它们是

1:从 main 返回

2:调用 exit

3:调用 _exit 或 _Exit

4:最后一个线程从其启动例程返回

5:最后一个线程调用pthread_exit

异常终止有3种,它们是

6:调用 abort

7:接到一个信号并终止

8:最后一个线程对取消请求做出响应

atexit可以最多支持注册32个函数(不同平台可能不同,但最少32个),这些函数在程序退出时,将按照注册时顺序的逆序依次调用。同一个函数可以注册多次

如果注册函数成功执行,将返回一个非零值,否则返回0

下面是一个小例子:

#include <stdio.h>      /* puts */#include <stdlib.h>     /* atexit */void fnExit1 (void){  puts ("Exit function 1.");}void fnExit2 (void){  puts ("Exit function 2.");}int main (){  atexit (fnExit1);  atexit (fnExit1);  atexit (fnExit2);  puts ("Main function.");  return 0;}


 

运行结果如下:



本文同时发布在:吱呀 敬请关注

原创粉丝点击