Chinaunix首页 | 论坛 | 博客
  • 博客访问: 148420
  • 博文数量: 26
  • 博客积分: 645
  • 博客等级: 上士
  • 技术积分: 340
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-05 15:00
文章分类

全部博文(26)

文章存档

2014年(1)

2013年(1)

2011年(22)

2010年(1)

2009年(1)

我的朋友

分类: LINUX

2011-07-11 19:49:25

atexit 可以注册进程退出时的钩子函数,先注册的后调用
exit退出时,会返回到进程启动历程,执行进程注册的钩子函数,而_exit()和_Exit()直接返回内核。
return 语句返回时,启动历程会自动调用exit()。
见代码:
  1. #include <stdlib.h>

  2. void my_exit1(void)
  3. {
  4.     printf("my_exit1 is called.\n");
  5. }

  6. void my_exit2(void)
  7. {
  8.     printf("my_exit2 is called.\n");
  9. }

  10. int main(int argc, char *argv[])
  11. {
  12.     if(atexit(my_exit2) != 0)
  13.         printf("can't register my_exit2.\b");
  14.     if(atexit(my_exit1) != 0)
  15.         printf("can't register my_exit1.\b");
  16.     if(atexit(my_exit1) != 0)
  17.         printf("can't register my_exit1.\b");
  18.     printf("main is done.\n");
  19.     return(0);
  20. }

运行结果:
main is done.
my_exit1 is called.
my_exit1 is called.
my_exit2 is called.

如果将return(0)改为_exit(0),则运行结果:
main is done.
atexit 注册的函数不会被调用。
阅读(1260) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~