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 服务器同步 Rsync同步服务器文件

    Linux 服务器同步 Rsync同步服务器文件

    服务器之间常常要保持些文件或目录的一致,比如一些大的软件下载网站,它们通常使用多台服 务器来提供下载服务。
    2009-08-08
  • Linux服务器实现文件实时同步的方法详解

    Linux服务器实现文件实时同步的方法详解

    在做系统集群部署时,常常会涉及到两个或多个服务器之间文件同步,这篇文章主要来和大家介绍一下Linux服务器实现文件实时同步的方法,需要的可以参考下
    2024-03-03
  • Linux下NOGUI快速使用Jmeter的两种实现方式

    Linux下NOGUI快速使用Jmeter的两种实现方式

    文章介绍了在Linux环境下使用Jmeter进行无GUI测试的两种快速启动方法:直接下载安装包启动和使用docker启动,详细描述了每种方法的步骤,并强调了执行命令和查看报告的过程
    2025-02-02
  • Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化

    Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的

    VPS(全称Virtual Private Server)是利用最新虚拟化技术在一台物理服务器上创建多个相互隔离的虚拟私有主机。它们以最大化的效率共享硬件、软件许可证以及管理资源。
    2008-12-12
  • Linux下的多线程编程实例解析

    Linux下的多线程编程实例解析

    这篇文章主要介绍了Linux下的多线程编程实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 分享服务器被入侵的处理过程

    分享服务器被入侵的处理过程

    这篇文章主要介绍了一次服务器被入侵的处理过程分享,下文中的给文件和目录加锁,是指给文件和目录增加了一些属性,只读等,需要的朋友可以参考下
    2022-09-09
  • Linux如何利用iptables屏蔽某些域名

    Linux如何利用iptables屏蔽某些域名

    这篇文章主要介绍了Linux如何利用iptables屏蔽某些域名问题,具有很好的参考价值,希望对大家有所帮助,
    2023-09-09
  • Linux性能监控工具nmon安装及使用教程解析

    Linux性能监控工具nmon安装及使用教程解析

    这篇文章主要介绍了Linux性能监控工具nmon安装及使用教程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Linux进程和计划任务管理方式

    Linux进程和计划任务管理方式

    程序是存储在存储设备上的静态代码,而进程是程序在CPU和内存中动态执行的实体,进程可以有父子关系,查看进程信息的命令包括ps,top,pgrep,jobs,pstree等,用于监控和管理进程状态,ps命令可以显示终端的所有进程
    2024-09-09
  • Linux使用less高效读取GC日志的实现方法

    Linux使用less高效读取GC日志的实现方法

    在Linux环境中,日志分析是运维和开发人员日常工作中不可或缺的一部分,特别是对于Java应用的垃圾回收(GC)日志,本文将结合实际案例,详细讲解如何使用 less 命令高效读取和分析GC日志,需要的朋友可以参考下
    2025-04-04

最新评论