• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard-进程的基本操作之进程终止atexit

05/09 16:55
115
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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() 注册的函数不会被执行。

相关推荐