您的位置:首页 > 其它

atexit函数简介

2017-02-27 17:11 246 查看
         按照ISO C的规定,一个进程可以登记多达32个函数,这些函数将由exit自动调用.通常这32个函数被称为终止处理程序,并调用atexit函数来登记这些函数,atexit()注册的函数类型应为不接受任何参数的void函数,当程序通过调用exit()或从main 中返回时, 参数function 所指定的函数会先被调用, 然后才真正由exit()结束程序。

       atexit函数简介:
函数名: atexit
头文件:#include<stdlib.h>
功 能: 注册终止函数(即main执行结束后调用的函数)
返回值:成功返回0;失败返回一个非0值,并存在error中。
用 法: void atexit(void (*func)(void));
注意:exit调用这些注册函数的顺序与它们登记时候的顺序相反。同一个函数如若登记多次,则也会被调用多次。

程序例子:

#include <stdio.h>

#include <stdlib.h>

void exit_fn1(void)

{
printf("Exit function #1 called\n");

}

void exit_fn2(void)

{
printf("Exit function #2 called\n");

}

int main(void)

{

/* post exit function #1 */

atexit(exit_fn1);

/* post exit function #2 */

atexit(exit_fn2);

return 0;

}

输出:

Exit function #2 called

Exit function #1 called

进程的终止方式:

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

1:从 main 返回

2:调用 exit

3:调用 _exit 或 _Exit

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

5:最后一个线程调用pthread_exit

异常终止有3种,它们是

6:调用 abort

7:接到一个信号并终止

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

#include <stdlib.h>

void exit (int status);

void _Exit (int status);

#include <unistd.h>

void _exit (status);

其中调用 _exit,_Exit 都不会调用终止程序

异常终止也不会。

与析构函数的调用顺序:

在atexit(f)调用之前被静态分配的对象的析构函数将在f()的调用之后被调用。在一个atexit(f)调用之后建立的这种对象的析构函数将在f的调用之前被调用。

调用顺序:在一个程序中可以用atexit()注册几个处理函数(注册次数依赖于你的编译器),这些处理函数的调用顺序与其注册的顺序相反,也即最先注册的最后调用,最后注册的最先调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: