linux下exit 和 exit 的區別

2021-06-07 15:46:49 字數 1836 閱讀 1480

#include

void exit(int status);

不像fork那麼難理解,從exit的名字就能看出,這個系統呼叫是用來終止乙個程序的。無論在程式中的什麼位置,只要執行到exit系統呼叫,程序就會停止剩下的所有操作,清除包括pcb在內的各種資料結構,並終止本程序的執行。請看下面的程式:

/* exit_test1.c */

#include

main()

編譯後執行:

$gcc exit_test1.c -o exit_test1

$./exit_test1

this process will exit!

我們可以看到,程式並沒有列印後面的"never be displayed!\n",因為在此之前,在執行到exit(0)時,程序就已經終止了。

exit 系統呼叫帶有乙個整數型別的引數status,我們可以利用這個引數傳遞程序結束時的狀態,比如說,該程序是正常結束的,還是出現某種意外而結束的,一般來說,0表示沒有意外的正常結束;其他的數值表示出現了錯誤,程序非正常結束。我們在實際程式設計時,可以用wait系統呼叫接收子程序的返回值,從而針對不同的情況進行不同的處理。

exit和_exit

作為系統呼叫而言,_exit和exit是一對孿生兄弟。

這時隨便乙個懂得c語言並且頭腦清醒的人都會說,_exit和exit沒有任何區別,但我們還要講一下這兩者之間的區別,這種區別主要體現在它們在函式庫中

的定義。_exit在linux函式庫中的原型是:

#include

void _exit(int status);

exit比較一下,exit()函式定義在 stdlib.h中,而_exit()定義在unistd.h中,從名字上看,stdlib.h似乎比unistd.h高階一點,那麼,它們之間到底有什麼區別呢?

_exit()函式的作用最為簡單:直接使程序停止執行,清除其使用的記憶體空間,並銷毀其在核心中的各種資料結構;exit()函式則在這些基礎上作了一些包裝,在執行退出之前加了若干道工序,也是因為這個原因,有些人認為exit已經不能算是純粹的系統呼叫。

exit()函式與_exit()函式最大的區別就在於exit()函式在呼叫exit系統呼叫之前要檢查檔案的開啟情況,把檔案緩衝區中的內容寫回檔案,就是「清理i/o緩衝」。

在linux 的標準函式庫中,有一套稱作「高階i/o」的函式,我們熟知的printf()、fopen()、fread()、fwrite()都在此列,它們也被稱作「緩衝i/o(buffered i/o)」,其特徵是對應每乙個開啟的檔案,在記憶體中都有一片緩衝區,每次讀檔案時,會多讀出若干條記錄,這樣下次讀檔案時就可以直接從記憶體的緩衝區中讀取,每次寫檔案的時候,也僅僅是寫入記憶體中的緩衝區,等滿足了一定的條件(達到一定數量,或遇到特定字元,如換行符\n和檔案結束符eof),再將緩衝區中的內容一次性寫入檔案,這樣就大大增加了檔案讀寫的速度,但也為我們程式設計帶來了一點點麻煩。如果有一些資料,我們認為已經寫入了檔案,實際上因為沒有滿足特定的條件,它們還只是儲存在緩衝區內,這時我們用_exit()函式直接將程序關閉,緩衝區中的資料就會丟失,反之,如果想保證數

據的完整性,就一定要使用exit()函式。

請看以下例程

/* exit2.c */

#include

main()

編譯並執行:

$gcc exit2.c -o exit2

$./exit2

output begin

content in buffer

/* _exit1.c */

#include

main()

編譯並執行:

$gcc _exit1.c -o _exit1

$./_exit1

output begin

linux下exit 與 exit 的區別

void exit int staus 函式,在標頭檔案 include void exit int status 函式,在標頭檔案 include 中 在linux c中描述兩者區別是 exit返回後直接返回核心,而exit要進行清除工作,那麼兩者到底有什麼不同呢。編寫個小程式就很容易看出來 in...

Linux 中 exit和exit的區別

linux 中 exit和exit的區別 在linux的標準庫函式中,有一套稱作高階i o的函式,我們熟知的printf fopen fread fwrite都在此列,他們也被稱作緩衝i o。其特徵是對應每乙個開啟的檔案,都存在乙個緩衝區,在記憶體中都有一片緩衝區,每次讀檔案會多讀若干條記錄,這樣下...

exit和exit的區別?

exit終止呼叫程序,但不關閉檔案,不清除輸出快取,也不呼叫出口函式。exit函式將終止呼叫程序。在退出程式之前,所有檔案關閉,緩衝輸出內容 將重新整理定義,並呼叫所有已重新整理的 出口函式 由atexit定義 作為系統呼叫而言,exit和exit是一對孿生兄弟,它們究竟相似到什麼程度,我們可以從l...