atexit 函数
2017-05-03 00:00
615 查看
按照 ISO C 的规定,一个进程可以登记多达 32 个函数,这些函数将由
其中,
[2] UNIX 环境高级编程第 2 版.尤晋元等译.人民邮电出版社
exit自动调用。我们称这些函数为终止处理函数 (exit handler),并调用
atexit函数来登记这些函数。
#include <stdlib.h> int atexit(void (*func)(void)); 返回值:若成功则返回 0,或出错则返回非 0 值
其中,
atexit的参数是一个函数地址,当调用此函数时无需向它传送任何函数,也不期望它返回一个值。
exit调用这些函数的顺序与它们登记时候的顺序相反。同一函数如若被登记多次,则也会被调用多次。
atexit.c
#include <stdlib.h> /* external declarations */ extern void (*_Atfuns[])(void); extern size_t _Atcount; int (atexit)(void (*func)(void)) /* function to call at exit */ { if (_Atcount == 0) return (-1); _Atfuns[--_Atcount] = func; /* list is full */ return (0); }
exit.c
#include <stdio.h> #include <stdlib.h> /* macros */ #define NATS 32 /* static data */ void (*_Atfuns[NATS])(void) = {0}; size_t _Atcount = {NATS}; void (exit)(int status) /* tidy up and exit to system */ { while (_Atcount < NATS) { (*_Atfuns[_Atcount++])() ; } size_t ; for (i = 0; i < FOPEN_MAX; ++i) /* close all files */ if (_Files[i]) fclose(_Files[i]); _Exit (status); }
参考资料
[1] C 标准库.卢红星等译.人民邮电出版社[2] UNIX 环境高级编程第 2 版.尤晋元等译.人民邮电出版社
相关文章推荐
- atexit函数和exit函数的理解
- 浅析结束程序函数exit, _exit,atexit的区别
- atexit()函数
- exit和return的区别以及atexit()函数
- error LNK2019: 无法解析的外部符号 ___glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用 1>GEARS.obj : er
- 验证atexit()函数
- 关于linux下的 atexit 函数
- C++中的exit()和atexit()函数
- C语言atexit()函数
- atexit函数
- atexit()函数使用说明
- 让软件在退出的时候自动执行函数 -- atexit()
- atexit()函数
- atexit函数小结和静态对象析构
- atexit函数详解
- 程序退出时的必要处理之atexit()函数
- python中的atexit函数
- atexit()函数
- c++常用函数学习--------exit() 与atexit()的区别:
- exit 终止一个进程 atexit 注册终止函数