exit()和_exit()两个函数的区别
exit()和_exit()这两个函数都是用于函数退出,但这两者有一些细微的差别,在exit()函数里会调用_exit()函数。下面来看看exit()的函数代码大概:
void exit(int status)
{while(_exit_funcs != NULL){..._exit_funcs = _exit_funcs->next;}..._exit(status);
}
其中_exit_funcs是存储由__cxa_atexit和atexit注册的函数的链表,而这个while循环则遍历该链表并逐个调用这些注册的函数。最后再调用_exit(),这个函数的作用仅仅是调用了exit这个系统调用。即_exit()调用后,进程会直接结束。
#include <stdio.h>
#include <stdlib.h>void test1()
{printf("hello, test1.\n");
}
void test2()
{printf("hello, test2.\n");
}
void test3()
{printf("hello, test3.\n");
}
void test4()
{printf("hello, test4.\n");
}
void test5()
{printf("hello, test5.\n");
}int main()
{ atexit(test1);atexit(test2);atexit(test3);atexit(test4);atexit(test5);printf("hello, main.\n");return 0;
}
运行结果:
(1)使用exit()函数后
#include <stdio.h>
#include <stdlib.h>void test1()
{printf("hello, test1.\n");
}
void test2()
{printf("hello, test2.\n");
}
void test3()
{printf("hello, test3.\n");
}
void test4()
{printf("hello, test4.\n");
}
void test5()
{printf("hello, test5.\n");exit(0);
}int main()
{ atexit(test1);atexit(test2);atexit(test3);atexit(test4);atexit(test5);printf("hello, main.\n");return 0;
}
运行结果:
(2)使用_exit()函数
#include <stdio.h>
#include <stdlib.h>void test1()
{printf("hello, test1.\n");
}
void test2()
{printf("hello, test2.\n");
}
void test3()
{printf("hello, test3.\n");
}
void test4()
{printf("hello, test4.\n");
}
void test5()
{printf("hello, test5.\n");_exit(0);
}int main()
{ atexit(test1);atexit(test2);atexit(test3);atexit(test4);atexit(test5);printf("hello, main.\n");return 0;
}
exit()和_exit()两个函数的区别相关推荐
- 文本检查点web_reg_find和web_find两个函数的区别
LR脚本实战:文本检查点web_reg_find和web_find两个函数的区别 web_reg_find是先注册(register)后查找的:使用时将它放在请求语句的前面. 而web_find是查找 ...
- matlab中的conj函数,matlab中 conv和xcorr两个函数的区别conj()函数
conv()函数表示的是对某个离散序列做卷积运算,比如说两个数组: x(n)=[3,11,7,0,-1,4,2],-3<=n<=3;h(n)=[2,3,0,-5,2,1],-1<=n ...
- matlab中conj和,[转载]matlab中 conv和xcorr两个函数的区别conj()函数
conv()函数表示的是对某个离散序列做卷积运算,比如说两个数组: x(n)=[3,11,7,0,-1,4,2],-3<=n<=3;h(n)=[2,3,0,-5,2,1],-1<=n ...
- WSASocket()和socket()两个函数的区别
winsock是socket的windows平台的实现.winsock是微软专门为windows操作系统开发的socket网络编程接口,而socket是通用网络编程接口. socket() 函数创建一 ...
- Oracle中nvl和nvl2这两个函数的区别
1.nvl(value1,value2) 这个函数的意思是如果value1的值为null,那么函数返回value2的值 ,如果value1不为空,那么就返回value1的值. 需要注意的是value ...
- exit()与_exit()函数的区别
注:exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXI ...
- exit()与_exit()函数的区别(Linux系统中)
注:exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXI ...
- Linux中exit与_exit的区别
在exit,_exit的区别 - exit()与_exit()函数的区别(Linux系统中)2012-03-20 15:19:53 分类: LINUX 注:exit()就是退出,传入的参数是程序退出时 ...
- Linux下Exit和_exit函数说明
exit和_exit函数都是用来终止进程的.当程序执行到exit或_exit时,系统无条件的停止剩下所有操作,清除包括PCB(进程控制块)在内的各种数据结构,并终止本进程的运行.但是,这两个函数是有区 ...
最新文章
- php 面向对象开发 类的学习 一
- 过滤设置_深圳外置鱼池过滤器零售_杰蒙尼鱼池过滤器
- 盘点3个改变世界的AI项目,NLP/CV/BI,3个方向
- 点赞!一个程序员花了14小时寻找问题疫苗的流向
- 安卓intent发起广播事件给系统或当前app,并从系统或当前app中接收广播
- 用VS调试 javascript
- 反射修改jsessionid实现Session共享
- shell深井冰之linux命令行下使用豆瓣FM
- Win10电脑关机后立即自动重启怎么办
- Python Computer Vision Programming学习笔记(二)——基本的图像操作与处理
- 微信公众号第三方平台开发PYTHON教程 PART 5
- 大数据解析:程序员到底能干到多少岁?
- git(2)Git 基础
- ubuntu chm文档阅读
- UESTC 1903 铁路
- 2022 互联网中秋月饼大赏,腾讯送火腿,字节寓意圆满,你最钟爱哪款呢?
- 深入分析小程序与H5的区别
- vs 2022连接MySQL数据库
- tinymce编辑器之placeholder插件的实现
- 做html时css经常无效果,修改CSS样式无效有什么原因?