加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Linux C _exit函数与exit函数的联系与差异

发布时间:2021-11-18 11:58:08 所属栏目:PHP教程 来源:互联网
导读:一、联系 1、功能上,_exit和exit函数都是让进程正常退出,即关闭进程所打开的文件描述符,释放已占用内存和其他资源。 二、区别 1、_exit函数在头文件unistd.h中声明,而exit在头文件stdlib.h中声明。 2、执行_exit函数后,控制权立即返回给内核,而exit函

一、联系
 
1、功能上,_exit和exit函数都是让进程正常退出,即关闭进程所打开的文件描述符,释放已占用内存和其他资源。
 
二、区别
 
1、_exit函数在头文件unistd.h中声明,而exit在头文件stdlib.h中声明。
 
2、执行_exit函数后,控制权立即返回给内核,而exit函数要先执行一些清除操作,然后才将控制权交给内核。
 
3、_exit函数不会刷新I/O缓冲区,可能造成数据丢失,而exit函数是在_exit函数之上的一个封装,它在调用_exit函数之前,会先刷新I/O缓冲区,保证了数据的完整性。
 
注:知识背景:I/O缓冲区
 
  在Linux C标准函数库中,运用了一种名为“I/O缓冲区”的技术,即对于每一个打开的文件,在内存中都开辟了读写缓冲区。在读文件的时候,会连续的从硬盘中读出若干条数据到缓冲区,下次再读文件的时候直接从缓冲区中获取数据;同样,在写文件的时候,先把数据写到缓冲区,等到缓冲区中的数据量到达一定程度或者接收到特殊的指令,再将缓冲区中的数据一次性写到硬盘中。通过这种技术,减少了程序访问硬盘的次数,提高了运行效率。
 
三、结论
 
exit()函数与_exit()函数最大区别就在于exit()函数在调用_exit函数之前要检查文件的打开情况,把文件缓冲区的内容写回文件。
 
  下面通过两个demo程序来验证这个结论。
 
  1、调用exit函数结束程序
 
 1 #include <unistd.h>
 2 #include <stdio.h>
 3 #include <stdlib.h>  //exit()
 4
 5 int main(int argc, char *argv[])
 6 {
 7     printf("first_linen");   //函数遇到“n”时会刷新缓冲区
 8     printf("second_line");
 9     exit(0);
10     return 0;
11 }
运行结果如下图所示:两行都打印出来了
 
  
 
2、调用_exit函数结束程序
 
 1 #include <unistd.h>
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4
 5 int main(int argc, char *argv[])
 6 {
 7     printf("first_linen");
 8     printf("second_line");
 9     _exit(0);
10     return 0;
11 }
运行结果如下图所示:仅仅打印出第一行
 
 
 
3、先刷新缓冲区,再调用_exit函数结束程序
 
 1 #include <unistd.h>
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4
 5 int main(int argc, char *argv[])
 6 {
 7     printf("first_linen");
 8     printf("second_linen");
 9     _exit(0);
10     return 0;
11 }

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读