程序退出处理函数----atexit()

欢迎转载,请注明出处,本文地址: http://blog.csdn.net/jk050802/article/details/8631333

联系邮箱:yinfork@foxmail.com


函数原型:

*#include <stdlib.h>

 *intatexit(void (*func) (void));

 

作用:

用来登记程序退出时,需要调用的函数。在程序退出时,以最后登记的函数最先执行的顺序,执行登记过的函数。

 

说明:

1.      该函数的参数为一个函数地址;

2.      按照ISO C规定,至少可以登记32个函数;

3.      从该函数所属于的库看出,这个函数不止linux适用,大多操作系统也能使用;

4.      不同的退出函数,atexit登记的函数的执行情况是不同的。

 

实际测试:

         测试环境:Fedora10 + gcc 4.3.2

         并不是所以的退出函数都会执行到atexit登记的函数。下面是采用不同退出函数时,atexit所执行的情况。设登记的退出函数的顺序为atexit1, atexit1, atexit2。

1)       以exit (0) 或 return 0 退出时,终端显示正常退出,可以执行到atexit登记的函数

                   输出结果:

[root@localhost atexit]# ./test

main has done

atexit2

atexit1

atexit1

2)       以abort() 退出时,终端显示异常退出,不可以执行到atexit登记的函数

                   输出结果:

         [root@localhostatexit]# ./test

main has done

已放弃

3)       以_exit(0) 或_Exit(0)退出时,终端显示正常退出,但不可以执行到atexit登记的函数

                   输出结果:

[root@localhost atexit]# ./test

main has done

4)      以assert(0)退出时,终端显示异常退出,不可以执行到atexit登记的函数

                   输出结果:

[root@localhost atexit]# ./test

main has done

test: atexit.c:38: main: Assertion `0' failed.

已放弃    

 

测试代码:

#include <stdlib.h>

#include <unistd.h>

#include <stdio.h>

 

/***************************************************

 *#include<stdlib.h>

 *intatexit(void (*func) (void));

 *

 *return vaule:if success return 0.eles returnnot 0

 ***************************************************/

 

 

static void atexit1(void);

static void atexit2(void);

 

static void atexit1(void)

{

       printf("atexit1\n");

}

 

static void atexit2(void)

{

       printf("atexit2\n");

}

 

int main(void)

{

       if(atexit(atexit1) != 0)

                printf("can'tatexit1\n");

       if(atexit(atexit1) != 0)

                printf("can'tatexit1\n");

       if(atexit(atexit2) != 0)

                printf("can'tatexit2\n");

 

       printf("main has done\n");

 

//     abort();

//     assert(0);

//     _exit(0);

       exit(0);

//     return 0;

 

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值