atexit函数申明

1
2
#include <stdlib.h>
int atexit(void (*function)(void));

atexit函数简单介绍

  • atexit函数用于注册回调函数,回调函数在程序正常终止时被调用。
  • 回调函数的执行顺序是注册顺序的逆序,调用时不传入参数。
  • 同一函数可以多次注册,每一次注册都会对应一次回调。
  • 如果使用fork生成子进程,那么子进程会继承父进程注册的回调函数。

atexit函数的返回值

成功时返回0,否则返回非0值。

程序正常终止的理解

  • 使用exit系统调用返回。
  • main函数结束返回。

样例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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);
}