天天看點

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的值。

繼續閱讀