搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
天景科技苑
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
获取依赖aar包的两种方式-在android studio里引入 如:glide_android 依赖aar
2
【代码随想录】Day3 203.移除链表元素 707.设计链表 206.反转链表
3
NLP-生成模型-2017-Transformer(二):Transformer各模块代码分析_2017 transformer
4
Python实践项目讲解:如何用制作一个桌面宠物_python桌宠
5
精通 Postman:使用 POST 请求发送 JSON 数据的全面指南_postman post json
6
阿里 EchoMimic: 在线生成语音匹配的数字人头_echomimic 在线
7
NLP入门学习2——文本分类(基于keras搭建LSTM)_keras 多层lstm layer = lstm
8
2024年软件测试行业还值得入行吗?_软件测试行情
9
android常用工具类 --- UI操作_android 公用类操作ui
10
优秀博客链接(linux c/c++ java go php android ios 前端 j2ee windows linux 算法 ACM AI 深度/机器学习 opencv nlp)
当前位置:
article
> 正文
C语言退出函数
作者:天景科技苑 | 2024-08-05 20:38:20
赞
踩
c语言退出函数
C标准定义了下面的退出函数:
#include <stdlib.h>
void exit(int status);
void _Exit(int status);
int atexit(void (*function)(void));
函数功能介绍如下:
void exit(int status)
该函数终止调用的程序。status传递给系统用于父进程恢复。程序退出之前,exit()调用所有以atexit()注册的函数,清空所有打开的<stdio.h> FILE*流的缓冲区并关闭流,然后删除所有由tmpfile()创建的临时文件。进程退出时,内核关闭所有剩下的已打开文件(即那些由open()、creat()或文件描述符继承打开的文件),释放其地址空间,然后释放所有其他使用的资源。exit()从不返回。
void _Exit(int status)
该函数基本上与POSIX的_exit()函数相同;我们稍后再对其进行介绍。
int atexit(void (*function)(void))
function是一个函数指针,指向程序退出时候调用的一个回调函数。exit()在其关闭文件和终止之前调用该回调函数。这个想法在于程序能够在最终关闭之前提供一个或者多个运行的清理函数。提供一个函数被成为注册该函数。
atexit()成功时返回0,出错时返回-1并设置相应的errno。
下面的程序没有有用的功能,但它演示了如何使用atexit():
void callback1(void){printf("callback called\n");}
void callback2(void)(printf("callback called\n");}
void callback3(void)(printf("callback called\n");}
int main(int argc,char** argv)
{
printf("registering callback1\n");atexit(callback1);
printf("registering callback2\n");atexit(callback2);
printf("registering callback3\n");atexit(callback3);
printf("exiting now\n");
exit(0);
}
下面是程序的运行结果:
$atexit
registering callback1
registering callback2
registering callback3
exiting now
callback3 called
callback2 called
callback1 called
正如上例所示,使用atexit()注册的函数运行时的顺序和注册的顺序相反:最近注册的最先运行(这也称为后进先出(last-in-first-out),缩写为LIFO)。
POSIX定义了_exit()函数。与exit()不同,exit()调用回调函数并进行<stdio.h>清理,_exit()是“立即死亡”的函数:
#include <unistd.h>
void _exit(int status);
_exit终止调用进程,但不关闭文件,不清除输出缓存,也不调用出口函数。exit函数将终止调用进程。在退出程序之前,所有文件关闭,缓冲输出内容将刷新定义,并调用所有已刷新的“出口函数”(由atexit定义)。
实际上,ISO C的_Exit()函数与_exit()相同。C函数指出_Exit()是否调用以atexit()注册的函数并关闭打开的文件取决与实现。对于GLIBC系统,可能不会,即_Exit()与_exit()表现相似。
使用_exit()的时机是在fork()产生的子进程中调用exec()失败的时候。这种情况下,不需要使用通常的exit(),因为它会清空所有由FILE*流保存的缓冲区数据。随后父进程清空其缓冲区拷贝时,导致缓冲的数据被写了两次;显然这不是很恰当。
例如,加入你运行了一个shell命令,并且自己调用fork()和exec()。代码可能如下所示:
char *shellcommand="...";
pid_t child;
if((child=fork())==0){
execl("/bin/sh","sh","-c",shellcommand,NULL);
_exit(errno==ENOENT?127:126);
}
errno测试和退出值采取了POSIX shell所使用的惯例。如果要求的程序没有退出(ENOENT——目录中没有它的项),则退出值为127。否则,文件同样退出,但由于其他原因不能够被exec()执行,则退出状态为126。在你自己的程序中采取这个惯例将会是个好主意。
简言之,为了更好地使用exit()和atexit(),你应该遵循一下规则:
1、定义一个较小的退出状态值的集合,你的程序使用该集合中的值与其调用者进行通信。在你的代码中使用#define常量或enum定义这些值。
2、决定是否有必要与atexit()一起使用回调函数。如果有必要,则在main()中适当地方注册这些函数;例如,在解析选项之后以及初始化任何回调函数可能清除的数据结构之后,记住函数以LIFO(last-in-first-out)顺序进行调用。
3、如果出错,在任一地方都可以使用exit()从程序退出,退出是能够发生的正确行为。同时使用你定义的错误代码。
4、main()函数是个例外,你可以在其中使用return。我们自己的风格是,通常出问题时使用exit(),而如果一切正常,在main()结尾处使用“return 0”。
5、如果调用exec()失败,则在子进程中使用_exit()或_Exit()。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/天景科技苑/article/detail/934161
推荐阅读
article
Flutter
修
改
App的
名称
和
图标
_什么应用可以
改
应用名字
和
图标
...
文章目录Android
修
改
名称
和
图标
IOS
修
改
名称
和
图标
Flutter
新创建的项目默认的
图标
是
Flutter
icon,...
赞
踩
article
python利用
pandas
合并
excel
表格代码_利用
Python
pandas
对
Excel
进行合...
前言在网上找了很多
Python
处理
Excel
的方法和代码,都不是很尽人意,所以自己综合网上各位大佬的方法,自己进行了优化...
赞
踩
article
Linux
文件
管理
和IO
重定向
知识总结...
文件
管理
+IO
重定向
介绍
Linux
文件
管理
和IO
重定向
知识总结 目录 一,
文件
管理
Li...
赞
踩
article
【重磅福利】《
深入
理解
机器
学习
算法
》
精品课程
...
【重磅
学习
福利】阿里云培训专家亲授《
深入
理解
机器
学习
算法
》
精品课程
5月15日至6月2日,参加阿里云大学大数据入门知识挑战...
赞
踩
article
第
3
章
计算机
应用
基础
_
大学生
计算机
基础
分数汇总,如图
3
-1所示...
计算机
应用
基础
_
大学生
计算机
基础
分数汇总,如图
3
-1所示
大学生
计算机
基础
分数汇总,如图
3
-1所示 ...
赞
踩
article
95期
:
Docker
常见
故障
排查
指南大全_
docker
故障
排除
数据
转移...
摘要
:
《云周刊》95期
:
Docker
常见
故障
排查
指南大全本期头条 不能错过的干货分享
:
支付宝App架构、阿里自研云
数据
...
赞
踩
article
远程工具:
MobaXterm
使用
图文
教程
_
mobaxterm
使用
教程
...
MobaXterm
作为一款优秀的远程连接工具,很多朋友在日常当中都会
使用
到,今天小编给大家介绍一下
MobaXterm
从下...
赞
踩
article
CBAM
:Convolutional Block Attention Module流程详解及Pyto...
CBAM
结构详解及
Pytorch
实现_
cbam
: convolutional
block
attention
modul...
赞
踩
article
CVE
漏洞
复现
-
CVE
-2023-32233
NetFilter
权限提升...
Netfilter是Linux 内核中的网络数据包处理框架(iptables)通过各种规则和过滤器,基于数据包的来源、目...
赞
踩
article
Integration
Services
学习(4):包配置_
integration
service...
Integrartion
Services
包实际上就是一个对象属性的集合,在前面我们开发的所有
Integration
...
赞
踩
article
uniapp
项目 使用
vue
-
plugin
-
hiprint
静默
打印
功能_
vue
-
plugin
-hip...
uniapp
项目使用
vue
-
plugin
-
hiprint
静默
打印
_
vue
-
plugin
-
hiprint
uniapp
vu...
赞
踩
article
xilinx
fpga
硬件调试_
xilinx
mark
debug
...
fpga
硬件调试 (一)----
mark
_
debug
最近两个月开始用Vivado做项目,之前一直用ISE开发,个人觉得I...
赞
踩
article
24
年第五届“华
数杯
”
数学
建模
竞赛浅析_20
24
华
数杯
a
题
机器臂关节角
路径
的
优化
设计...
同时,随着问
题
的
深入,还需要考虑底座移动
路径
和多货物抓取等情况,增加了问
题
的
复杂性,难度适中。此外,还需要考虑NP难问
题
...
赞
踩
article
.
net
实现
游戏
外挂
,完整
代码
_
外挂
对接
代码
...
.
net
实现
游戏
外挂
,完整
代码
(原创) using System; using System.Drawing; ...
赞
踩
article
基于
SpringBoot
实现
MySQL
备份
与还原_
springboot
数据库
备份
还原...
基于
SpringBoot
实现
MySQL
备份
与还原_
springboot
数据库
备份
还原
springboot
数据库
备份
还原 ...
赞
踩
article
谷歌
浏览器
最新
驱动
chromedriver
下载
与安装方法...
最近一段时间,大家发现之前的
chromedriver
已经不显示
最新
的版本了,小编经过一番周折最终还是整理
最新
版本的
下载
地...
赞
踩
article
基于
动力学
模型
的
机械
臂滑膜
控制
_
机械
臂
滑模
控制
...
参考资料:https://zhuanlan.zhihu.com/p/463230163(思路理解)https://blo...
赞
踩
article
leetcode
代码练习——
Java
的
数据结构
(
具体
使用
)...
Map,HashSet,List,ArrayList,Queue,Deque
leetcode
代码练习——
Java
的
数据结...
赞
踩
article
人工智能
在职
研究生
通过率怎么样_国内
人工智能
专业
同等学历
在职
研究生
...
最近几年
人工智能
是非常受欢迎的,不少
在职
人员准备通过
在职
读研的方式报考该专业,但是对通过率不是很清楚。下面就为大家介绍一...
赞
踩
article
Python
pandas
操作
excel
详解
_
pandas
处理
excel
_
pd
输出成
excel
...
场景2:指定第 n 行为标题场景3:没有标题,需要人为给定2.2.2 index
_
col:索引列索引相关:2.2.3 d...
赞
踩
相关标签
Flutter
app
名称
图标
python利用pandas合并excel表格代码
linux
运维
服务器
计算机应用基础
计算机系统的组成
MobaXterm
SSH连接
文件传输
终端服务
SFTP
pytorch
深度学习
神经网络
人工智能
attention
网络
网络安全
安全
sql server