您的位置:首页 > 其它

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

2013-03-03 18:24 260 查看
欢迎转载,请注明出处,本文地址: 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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: