atexit()函数使用说明

摘要:本文描述的是Linux手册页中atexit()函数的使用说明,使用atexit()函数注册终止处理程序.原文来自:http://www.kernel.org/doc/man-pages/.
NAME
    atexit - 用来注册执行exit()函数前执行的终止处理程序.
SYNOPSIS
    #include <stdlib.h>
    int atexit(void (*function)(void));
DESCRIPTION
    atexit()用来注册终止处理程序,当程序通过调用exit()或从main 中返回时被调用.终止处理程序执行的顺序和注册时的顺序是相反的,终止处理程序没有参数传递.同一个函数若注册多次,那它也会被调用多次.按POSIX.1-2001规定,至少可以注册32个终止处理程序,若想查看实际可以注册多少个终止处理程序,可以通过调用sysconf()函数获得.
    当一个子进程是通过调用fork()函数产生时,它将继承父进程的所有终止处理程序.在成功调用exec系列函数后,所有的终止处理程序都会被删除.
RETURN VALUE
    成功返回0,失败返回非0值.
CONFORMING TO
       SVr4, 4.3BSD, C89, C99, POSIX.1-2001.
NOTES
    如果一个进程被信号所中断,那由atexit()函数注册的终止处理程序不会被调用.
    如果在其中一个终止处理程序中调用了_exit()函数;那剩余的终止处理程序将不会得到调用,同时由exit()函数调用的其他终止进程步骤也将不会执行.
    在POSIX.1-2001标准中,在终止进程过程中,在终止处理程序中,不只一次的调用exit()函数,这样导致的结果是未定义的.在某些系统中,这样的调用将会导致递归死循环.可移植的程序不应该在终止处理程序中调用exit()函数.
    函数atexit()和on_exit()在注册终止程序时,有一样的列表.在进程正常退出时执行终止处理程序,调用的顺序刚好与注册时相反.
   按POSIX.1-2001的规定,如果在终止处理程序中调用longjmp()函数,这样导致的结果是未定义的.
  Linux notes
   自glibc2.2.3版本后,atexit()和on_exit()函数能够使用在共享库建立的函数,当共享库卸载时被调用.
EXAMPLE
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

       void
       bye(void)
       {
           printf("That was all, folks\n");
       }

       int
       main(void)
       {
           long a;
           int i;

           a = sysconf(_SC_ATEXIT_MAX);
           printf("ATEXIT_MAX = %ld\n", a);

           i = atexit(bye);
           if (i != 0) {
               fprintf(stderr, "cannot set exit function\n");
               exit(EXIT_FAILURE);
           }

           exit(EXIT_SUCCESS);
       }
END

笔者:个人能力有限,只是学习参考...读者若发现文中错误,敬请提出.

-- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------勿在浮沙筑高台,静下心来,慢慢地沉淀---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值