linuxC庫函式 exit和exit的區別

2021-09-26 05:41:14 字數 1024 閱讀 4974

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

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

exit()函式定義在stdlib.h中,而_exit()定義在unistd.h中。

exit()和_exit()都用於正常終止乙個函式。但_exit()直接是乙個sys_exit系統呼叫,而exit()則通常是普通函式庫中的乙個函式。它會先執行一些清除操作,例如呼叫執行各終止處理函式、關閉所有標準io等,然後呼叫sys_exit。

int main(int argc , char* ar**)

int main(int argc , char* ar**)

這兩個程式,程式1輸出的是兩句話:

hello

world

而程式2只輸出了一句話:

hello

原因就是因為最後一句話上沒有加上特殊的字元,如換行和檔案結束符,因為這個時候檔案是存放在緩衝區的,這個例子中檔案就是存放開啟的顯示裝置的緩衝區中的,因為輸出函式要寫入,首先要進行系統呼叫,這個時候系統會開啟顯示裝置的緩衝區,而exit的作用就是結束,清理,就是說先檢查緩衝區,把沒有寫入的資料寫入到檔案,而_exit是立刻關閉檔案,檔案緩衝區的內容也就消失了,這個時候就不可能再輸出到顯示裝置了。

linux C庫函式 二

linux c庫函式 二 2010年01月26日 b linux fopen fclose fread fwrite等函式 b b b clearerr 清除檔案流的錯誤旗標 相關函式 feof 表頭檔案 include 定義函式 void clearerr file stream 函式說明 cle...

linux C庫函式 二

linux c庫函式 二 2010年01月26日 b linux fopen fclose fread fwrite等函式 b b b clearerr 清除檔案流的錯誤旗標 相關函式 feof 表頭檔案 include 定義函式 void clearerr file stream 函式說明 cle...

linux C庫函式 三

linux c庫函式 三 2010年01月26日 fseek 移動檔案流的讀寫位置 相關函式 rewind,ftell,fgetpos,fsetpos,lseek 表頭檔案 include 定義函式 int fseek file stream,long offset,int whence 函式說明 ...