exit和_exit的关系

原创 2013年12月05日 20:02:31

exit()在头文件stdlib.h中声明

_exit()声明在头文件unistd.h中声明

 

._exit()执行后立即返回给内核

exit()要先执行一些清除操作,然后将控制权交给内核

 

调用_exit函数时,其会关闭进程所有的文件描述符,清理内存以及其他一些内核清理函数,但不会刷新流(stdin, stdout, stderr ...)

 函数exit是在_exit函数之上的一个封装,它会调用_exit,并在调用之前先刷新流

 

exit()函数与_exit()函数最大区别:

在于exit()函数在调用exit系统之前要检查文件的打开情况,把文件缓冲区的内容写回文件。

由于Linux的标准函数库中,有一种被称作“缓冲I/O”的操作,其特征就是对应每一个打开的文件,在内存中都有一片缓冲区。每次读文件时,会连续的读出若干条记录,这样在下次读文件时就可以直接从内存的缓冲区读取;同样,每次写文件的时候也仅仅是写入内存的缓冲区,等满足了一定的条件(如达到了一定数量或遇到特定字符等),再将缓冲区中的内容一次性写入文件。这种技术大大增加了文件读写的速度,但也给编程代来了一点儿麻烦。比如有一些数据,认为已经写入了文件,实际上因为没有满足特定的条件,它们还只是保存在缓冲区内,这时用_exit()函数直接将进程关闭,缓冲区的数据就会丢失。因此,要想保证数据的完整性,就一定要使用exit()函数。

例1:

linux:/mnt/zqc/c-file # cat exit.c
#include<stdio.h>
#include<stdlib.h>

int main()
{
        printf("using exit----\n");
        printf("This is the content in buffer\n");
        exit(0);
}
linux:/mnt/zqc/c-file # ./exit
using exit----
This is the content in buffer

例2:

 

linux:/mnt/zqc/c-file # cat _exit.c
#include<stdio.h>
#include<unistd.h>

int main(void)
{
        printf("using _exit--\n");
        printf("This is the content in buffer");
        _exit(0);
}

linux:/mnt/zqc/c-file # ./_exit
using _exit--

 

 

exit()与_exit()的区别

exit()与_exit()的区别:   exit和_exit函数用于终止一个程序:         _exit直接进入内核,exit则先执行一些清除处理(在进程退出之前要检查文件状态,将文件缓...
  • TKDwave520
  • TKDwave520
  • 2013年09月15日 10:24
  • 2040

IN和EXIT的区别

in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in...
  • shenghuiping2001
  • shenghuiping2001
  • 2009年07月22日 11:01
  • 2345

exit函数和_exit函数的区别

高级I/O函数在Linux标准库中,有一套称为高级I/O函数,例如我们所熟知的printf,fopen,fread,fwrite都在此列,他们也被称为缓冲I/O。其特征是对应每一个打开的文件,都存在一...
  • bit_clearoff
  • bit_clearoff
  • 2017年01月14日 10:51
  • 1592

5.关于NVIC 和 EXIT的的配置

再次学外部中断然后一下子就把我卡这里了,本来一晚上就能搞懂的,谁知道那天只是比较简单懂了 IO映射,EXIT 和 NVIC 的关系,直到今天才有机会把思路理清一下,深入理解NVIC 和 EXIT 还有...
  • zhiyu_buliang
  • zhiyu_buliang
  • 2018年01月02日 22:49
  • 70

__init和__exit宏的作用

__init和__exit宏的作用 内核的部分函数带有__init和__exit宏,负责“初始化”和“清理收尾”该函数。如果该模块被编译进内核,而不是动态加载。宏 __init的使用会在初始化完...
  • zhenwenxian
  • zhenwenxian
  • 2013年02月02日 07:50
  • 4126

SHELL中的exit 0 和 exit 1有什么区别?

当你 exit 0 的时候,在调用环境 echo $? 就返回0,也就是说调用环境就认为你的这个程序执行正确 当你 exit 1 的时候,一般是出错定义这个1,也可以是其他数字,很多系统程序这个错误编...
  • sanbingyutuoniao123
  • sanbingyutuoniao123
  • 2017年05月21日 10:56
  • 1809

return() 与exit() 的区别

在初学编程的过程中,往往return和exit我们不做过多的区分,都只认为是程序的结束,但是其实在具体的操作上有些区别,我们将借助vfork从栈的操作上理解二者的区别...
  • Avalon_Y
  • Avalon_Y
  • 2016年03月19日 17:31
  • 818

PHP中die和exit的区别

die和exit都是语言结构而非函数,用通俗点的话讲,语言结构可以理解为语法本身的一种标识。像+、-、*、/这些也都是语言结构,if、else、for、while,这些都是语言结构。是语法本身的一部分...
  • zzw6236056
  • zzw6236056
  • 2015年11月19日 11:10
  • 663

SHELL: return 与 exit 的区别

1、exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。main函数结束时也会隐式地调用exit函数。exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自...
  • roler_
  • roler_
  • 2013年12月27日 11:23
  • 2593

linux c中return 与exit的区别

1. return 是c语言中的关键字,而exit是linux中的系统调用。 return是表示函数的返回,而exit是进程的终止。 如果return 或者exit出现在main...
  • amaowolf
  • amaowolf
  • 2012年10月09日 15:07
  • 4005
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:exit和_exit的关系
举报原因:
原因补充:

(最多只允许输入30个字)