我們知道做什麼事情都是有始有終,在程式設計中也是一樣。在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...