Linux 中_exit和exit的区别

 更新时间:2017年03月07日 17:31:08   作者:viclee108  
这篇文章主要介绍了Linux 中_exit和exit的区别的相关资料,需要的朋友可以参考下

Linux 中_exit和exit的区别

在Linux的标准库函数中,有一套称作高级I/O的函数,我们熟知的printf 、fopen 、fread 、fwrite都在此列,他们也被称作缓冲I/O。其特征是对应每一个打开的文件,都存在一个缓冲区, 在内存中都有一片缓冲区,每次读文件会多读若干条记录,这样下次读文件时就可以直接从内存的缓存中取出,每次写文件时也仅仅是写入到内存的缓冲区,等待满足一定的条件(达到一定的数量,或者遇到特定字符,如换行和文件结束符EOF),再将缓冲区的内容一次性的写入文件,这样就大大增加了文件读写的速度,但也为我们编程带来了一点点麻烦,如果有些数据,我们认为已经写入了文件,实际上因为没有满足特定的条件,他们还只是保存在缓冲区内,这时我们用_exit函数直接将程序关闭,缓冲区中的数据就会丢失,反之,如果向保证数据的完整性,就一定要使用exit函数。

exit()函数与_exit()函数最大的区别就在于exit()函数在调用exit系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件,就是图中的"清理I/O缓冲"一项。

exit()函数定义在stdlib.h中,而_exit()定义在unistd.h中。exit()和_exit()都用于正常终止一个函数。但_exit()直接是一个sys_exit系统调用,而exit()则通常是普通函数库中的一个函数。它会先执行一些清除操作,例如调用执行各终止处理函数、关闭所有标准IO等,然后调用sys_exit。

    比如:

int main()
{ printf("this is a test function!!!/n")
 printf("test exit ");
 exit(0);
}
int main()
{ printf("this is a test function!!!/n")
 printf("test exit");
 _exit(0);
}

这两个程序,程序1输出的是两句话,而程序2只输出了一句话。原因就是因为最后一句话上没有加上特殊的字符,如换行和文件结束符,因为这个时候文件是存放在缓冲区的,这个例子中文件就是存放打开的显示设备的缓冲区中的,因为输出函数要写入,首先要进行系统调用,这个时候系统会打开显示设备的缓冲区,而exit的作用就是结束,清理,就是说先检查缓冲区,把没有写入的数据写入到文件,而_exit是立刻关闭文件,文件缓冲区的内容也就消失了,这个时候就不可能再输出到显示设备了。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Linux下的fdisk命令用法详解

    Linux下的fdisk命令用法详解

    这篇文章主要介绍了Linux下的fdisk用法,大家都知道fdisk功能真的很强大,用它可以划分出最复杂的分区,本文重点给大家介绍Linux下的fdisk命令用法,感兴趣的朋友一起看看吧
    2018-05-05
  • linux 下jenkins项目搭建过程(centos7为例 )

    linux 下jenkins项目搭建过程(centos7为例 )

    本文以centos7为例给大家介绍linux 下jenkins项目搭建过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-10-10
  • Linux查看和关闭后台运行程序的方法

    Linux查看和关闭后台运行程序的方法

    这篇文章主要介绍了Linux查看和关闭后台运行程序的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Linux通过设备号找到设备的方法

    Linux通过设备号找到设备的方法

    所有的Linux设备文件均位于/dev目录下,是根(/)文件系统的一个组成部分,因为这些设备文件在操作系统启动过程中必须可以使用。接下来通过本文给大家介绍Linux通过设备号找到设备的方法,感兴趣的朋友一起看看吧
    2018-07-07
  • CentOS下Lighttpd Web服务器安装与配置方法

    CentOS下Lighttpd Web服务器安装与配置方法

    CentOS下Lighttpd Web服务器安装与配置方法,需要的朋友可以参考下。
    2011-04-04
  • 浅谈互斥锁为什么还要和条件变量配合使用

    浅谈互斥锁为什么还要和条件变量配合使用

    下面小编就为大家带来一篇浅谈互斥锁为什么还要和条件变量配合使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 浅析Linux中使用nohup及screen运行后台任务的示例和区别

    浅析Linux中使用nohup及screen运行后台任务的示例和区别

    这篇文章主要介绍了Linux中使用nohup及screen运行后台任务的示例和区别,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • centos6.5通过yum安装nginx

    centos6.5通过yum安装nginx

    这篇文章主要为大家详细介绍了centos6.5通过yum安装nginx的相关步骤,linux安装nginx以及配置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • Linux系统中kill命令杀死进程常用小技巧分享

    Linux系统中kill命令杀死进程常用小技巧分享

    这篇文章主要介绍了Linux系统中kill命令杀死进程常用小技巧,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Linux下文件的切分与合并的简单方法介绍

    Linux下文件的切分与合并的简单方法介绍

    这篇文章主要介绍了Linux下文件的切分与合并的简单方法介绍,介绍了相关实例。实例通过split及cat命令实现此过程,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10

最新评论