当前位置: 首页 > news >正文

C语言中在main函数之后运行的函数

在 Linux 平台上,atexit 函数同样是一个用于注册终止处理函数的库函数,它是 C 标准库 <stdlib.h> 的一部分。atexit 函数允许你注册一个或多个函数,这些函数会在 main 函数执行结束后,或者在调用 exit 函数时,由 exit 自动调用。这些函数通常用于执行一些清理任务,如关闭文件、释放资源等。

atexit 函数的原型如下:
 

int atexit(void (*func)(void));

它接受一个函数指针作为参数,
该函数指针指向一个没有参数也没有返回值的函数。
注册成功的函数将在程序正常终止时被调用,
调用顺序与它们注册的顺序相反。

在 Linux 平台上使用 atexit 时,需要注意以下几点:

    按照 ISO C 的规定,一个进程可以登记多达 32 个函数用于 atexit。
    如果同一个函数被多次注册,那么它也会被多次调用。
    注册的函数不能带有参数,也不能有返回值。
    注册的函数在 exit 被调用时,会按照它们注册的反向顺序执行。

下面是一个简单的 C 语言示例,演示了如何在 Linux 平台上使用 atexit:

#include <stdio.h>  
#include <stdlib.h>  void cleanup1() {  printf("Cleanup 1 executed\n");  
}  void cleanup2() {  printf("Cleanup 2 executed\n");  
}  int main(int argc,char *argv[]) {  // 注册两个清理函数  atexit(cleanup1);  atexit(cleanup2);  printf("Program is exiting\n");  return 0;  
}

:/tmp/temp$ gcc test.c
/tmp/temp$ ./a.out
Program is exiting
Cleanup 2 executed
Cleanup 1 executed

相关文章:

  • Acwing 5468. 最有价值字符串【挖掘性质+分类讨论】
  • CVE-2018-19518 漏洞复现
  • 搜索二维矩阵[中等]
  • 【Linux】Linux下的基本指令
  • Android AOSP源码研究之万事开头难----经验教训记录
  • C++学习Day03之new和delete使用
  • 如何实现视线(目光)的检测与实时跟踪
  • JavaGuide
  • Huggingface上传模型
  • C# CAD交互界面-自定义面板集-添加快捷命令(五)
  • three.js 箭头ArrowHelper的实践应用
  • Peter算法小课堂—单调队列
  • SQL Server数据库日志查看若已满需要清理的三种解决方案
  • C#系列-C#操作UDP发送接收数据(10)
  • linux系统haproxy负载均衡工具的介绍以及使用
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • AWS实战 - 利用IAM对S3做访问控制
  • gcc介绍及安装
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JDK 6和JDK 7中的substring()方法
  • laravel with 查询列表限制条数
  • Mysql5.6主从复制
  • MySQL-事务管理(基础)
  • nginx 负载服务器优化
  • react 代码优化(一) ——事件处理
  • redis学习笔记(三):列表、集合、有序集合
  • Spark RDD学习: aggregate函数
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 欢迎参加第二届中国游戏开发者大会
  • 记一次和乔布斯合作最难忘的经历
  • 类orAPI - 收藏集 - 掘金
  • 数据可视化之 Sankey 桑基图的实现
  • 限制Java线程池运行线程以及等待线程数量的策略
  • MPAndroidChart 教程:Y轴 YAxis
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $$$$GB2312-80区位编码表$$$$
  • (2)nginx 安装、启停
  • (8)STL算法之替换
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (一)Dubbo快速入门、介绍、使用
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET 的程序集加载上下文
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .Net面试题4
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • @Bean, @Component, @Configuration简析
  • @Responsebody与@RequestBody
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)