exit函數


#include <stdlib.h>

void exit(int status);

exit庫函數將終止當前進程,並返回操作系統。status表示進程的退出碼,在stdlib.h頭文件中定義了兩個宏:

#define EXIT_SUCCESS 0

#define EXIT_FAILURE 1


#include <unistd.h>

void _exit(int status);

exit函數與_exit函數的區別:exit在結束進程前會執行一些清理工作,包括執行各種終止處理程序、關閉所有標準I/O等,然後才進入內核;而_exit調用將直接進入內核,將清理工作交給內核來完成,這樣I/O緩存將丟失。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    printf("this is the first line\n");
    printf("this is the second line");
    exit(0);
}
上述測試程序將打印兩行,如果將exit換成_exit,則只打印第一行,第二行被丟失了。


exit和return的最主要區別是:

exit是結束進程,返回OS,return是結束函數,返回調用者那兒;只有main函數調用return時,纔會結束進程。事實上,main函數在結束時會隱式的調用exit。


    exit函數運行時首先會執行由atexit()函數登記的函數,然後會做一些自身的清理工作,同時刷新所有輸出流、關閉所有打開的流並且關閉通過標準I/O函數tmpfile()創建的臨時文件。exit是結束一個進程,它將刪除進程使用的內存空間,同時把錯誤信息返回父進程。

#include <stdlib.h>

int atexit (void(*)(void))

atexit()函數的參數是一個函數指針,函數指針指向一個沒有參數也沒有返回值的函數。一個進程最多可以註冊32個終止處理函數,這些處理函數的調用順序與其註冊順序相反。

#include <stdio.h>
#include <stdlib.h>
  void exit_fn1(void)
  {
  printf("Exit function #1 called\n");
  }
  void exit_fn2(void)
  {
  printf("Exit function #2 called\n");
  }
  int main(void)
  {
  /* post exit function #1 */
  atexit(exit_fn1);
  /* post exit function #2 */
  atexit(exit_fn2);
  return 0;
  }





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章