atexit() 函数用于注册一个程序在正常终止时会自动调用的函数。通过这个函数,确保在程序结束时执行一些必要的清理工作,例如关闭文件、释放内存等。
1.头文件
#include <stdlib.h>
2.函数原型
int atexit(void (*function)(void));
3.参数
function:是一个没有参数、没有返回值的函数指针。该函数会在 exit() 被调用时执行。
4.返回值
成功时返回 0。失败时返回非零值(通常为非零错误码),表示注册失败。
5.示例:通过atexit()函数在完全退出进程前对资源进行处理
| #include <stdio.h>
#include <stdlib.h> void cleanup() { printf("Cleaning up resources...\n"); // 释放资源,例如关闭文件、释放内存等 } int main() { // 注册 cleanup 函数 if (atexit(cleanup) != 0) { fprintf(stderr, "Failed to register cleanup function.\n"); return EXIT_FAILURE; } printf("Program is running...\n"); // 正常退出,触发 cleanup exit(EXIT_SUCCESS); } |
6.运行结果
| Program is running...
Cleaning up resources... |
7.代码解析
通过 atexit(cleanup) 注册了 cleanup() 函数。这样在调用 exit() 时,cleanup() 会被自动调用。程序输出 "Program is running..." 后正常退出,然后 cleanup() 被调用,输出 "Cleaning up resources...".
可以多次调用 atexit() 注册多个函数,它们会按后注册先调用的顺序执行,一般情况下,大多数程序不需要注册多个 atexit() 函数(除非在比较复杂的模块化程序设计)。atexit() 注册的函数只在程序正常终止时执行,例如调用 exit() 或返回 main() 时。如果调用 _exit() 或者程序异常终止(如收到 SIGKILL 信号),atexit() 注册的函数不会被执行。
115