exit函式和 exit函式的二三事

2021-08-22 07:09:56 字數 1361 閱讀 8593

我們知道做什麼事情都是有始有終,在程式設計中也是一樣。在linux中建立乙個程序後,程式的末尾我們要將其退出,在linux中程序退出總共有八種方法,本篇文章主要講解其中兩個函式。

呼叫格式

#include

#include

void

exit(int status);

void _exit(int status);

exit系列函式並沒有返回值,它使用乙個叫做終止狀態的整型變數作為引數,核心會對這個終止狀態進行檢查,異常終止時,核心會直接產生乙個終止狀態字,描述異常終止的原因。對於終止狀態字,我們可以呼叫wait或者waitpid函式來獲取,有興趣的小夥伴可以翻閱相關資料。

呼叫過程

呼叫過程如圖所示,從圖中可以看出:

差別

exit函式在呼叫之前要檢查檔案的開啟情況,在這個過程中會把緩衝區中的資料寫入檔案。_exit函式做事就比較果斷,直接使程序終結。

這裡講點題外話:緩衝i/o

在linux標準庫中有中叫做緩衝i/o的操作,它的作用就是對應每乙個開啟的檔案,都會在記憶體中存在乙個緩衝區。每次讀檔案時,會讀出若干條記錄,方便下次讀取。寫檔案也是同樣的情況,先寫到緩衝區,然後等滿足一定條件,再將緩衝區中的資料寫入檔案。這種技術提高了檔案讀寫的速度,但是也帶來一些弊端。有時候你認為程式已經將資料寫入檔案,其實不然,所以有可能造成資料丟失。為了避免這種情況的發生,對於退出函式的理解就很重要了。

先看一段**

#include

#include

#include

#include

int main (int argc,char * argv)

else

if(pid == 0)

else

return

0;}

printf函式通過換行符來重新整理字串,因沒有換行符,所以程式設計師的美譽之詞並不會輸出,呼叫exit函式將檔案內容從緩衝區寫入檔案,所以在終端上我們可以看到子程序的兩條輸出語句。相應的_exit函式直接將緩衝區中的資料丟掉,我們只能看見父程序中第一條帶有換行符的輸出語句輸出結果:

正好驗證了我們的猜測。

文章難免會有所疏漏和考慮不全的地方,如果有問題,歡迎指正哦。

exit函式和 exit函式的區別

在談論exit函式與 exit函式之前,我們先了解一下他們的使用場景,他們是在程序終止中使用的,那什麼是程序終止呢?程序終止的場景 1 執行完畢,結果正確 即就是程序中的所有 都已執行完畢,而且執行結果也是你想要得到的,就像司馬懿的一生,順順利利的結束,實現了自己的人生理想,最後也成為了千古名人 2...

exit和 exit函式的區別

exit函式在函式退出時要對記憶體中的緩衝區做儲存處理,將緩衝區的內容儲存到磁碟。exit函式則不做這種處理,直接關閉,可能造成緩衝的資料丟失。在linux的標準庫函式中,有一套稱作高階i o的函式,我們熟知的printf fopen fread fwrite都在此列,他們也被稱作緩衝 i o。其特...

exit函式和 exit函式之間的區別

include include include include int main else return 0 這是別人的例項 我借用一下哈 這裡說明一下,printf是標準io函式,當遇到 n換行符的時候,才會將緩衝區裡面的內容進行輸出 執行結果是 this is exit test this is...