天天看点

exit与_exit函数的比较

_exit()执行后会立即返回,而exit()要先执行一些清除操作,比如刷新缓冲区,然后将控制权交给内核。

调用_exit()函数时,会关闭进程所有的文件描述符,清理内存,以及其他一些内核清理函数,但不会刷新流(stdin 、stdout、stderr……)。exit()函数是在_exit()函数上的一个封装,它会调用_exit,并在调用之前先刷新流。

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

代码测试

#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>

int main(int argc, char *argv[])
{
  int a = 100;
  printf("a=%d ", a);

#if 0
  exit(0);
#else
  _exit(0);
#endif

  printf("hello world\n");
  
   return 0;
}


           

测试结果

执行exit() 函数可以打印出a的值,而执行_exit() 函数无法打印出a的值。

继续阅读