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
|