atexit函数
Section 7.3. Process Termination
|
ISO C一个进程最多注册32个可以自动被exit函数调用的函数。
传递一个函数指针做为atexit的参数,当该函数被调用时,不传递任何参数也不返回任何值。exit函数以这些函数的反向注册顺序执行。
ISO C和POSIX.1,exit函数先调用exit handler,然后再通过fclose关闭所有打开的流。POSIX.1 extends the ISO C standard by specifying that any exit handlers installed will be cleared if the program calls any of the exec family of functions。
Figure 7.3. Example of exit handlers#include "apue.h" static void my_exit1(void); static void my_exit2(void); int main(void) { if (atexit(my_exit2) != 0) err_sys("can't register my_exit2"); if (atexit(my_exit1) != 0) err_sys("can't register my_exit1"); if (atexit(my_exit1) != 0) err_sys("can't register my_exit1"); printf("main is done\n"); return(0); } static void my_exit1(void) { printf("first exit handler\n"); } static void my_exit2(void) { printf("second exit handler\n"); } $ ./a.out
main is done
first exit handler
first exit handler
second exit handler
|