exit函式和 exit函式的區別

2021-08-16 22:04:08 字數 2701 閱讀 7591

在談論exit函式與_exit函式之前,我們先了解一下他們的使用場景,他們是在程序終止中使用的,那什麼是程序終止呢?

程序終止的場景:

(1)**執行完畢,結果正確;即就是程序中的所有**都已執行完畢,而且執行結果也是你想要得到的,就像司馬懿的一生,順順利利的結束,實現了自己的人生理想,最後也成為了千古名人

(2)**執行完畢,結果不正確;

即就是程序中的所有**都被執行,但是執行結果缺不是你想要得到的,就像諸葛亮一樣,他的一生也算是很順利的結束了,但是他卻沒有實現自己的人生抱負,給自己的人生留下了很大的遺憾。

(3)**異常終止

即就是,**沒有被執行完,程式就結束了。就像小霸王孫策,英年早逝,沒有到年齡就已過世,更不用說他有沒有實現自己的夢想。

標頭檔案:#include和#include

函式原型:void

exit(int status)

//status定義了程序的終止狀態,父程序通過wait來獲取該值

ps:雖然status是int,但是僅有低8位可以被父程序所用,

所以_exit(-1_時,在終端執行$?發現返回值是255

功能:直接使程序停止執行,清除其使用的記憶體空間,並清

除其在核心的各種資料結構。而且在執行退出之前執行

使用者定義的清理函式,沖刷緩衝,關閉流等

執行結果:

-bash-4.1

$ ./a.out

hello world.-bash-4.1$

ps: exit()函式會在終止程序前,將緩衝i/o內容清理掉,所以即使printf()裡面沒有」\n」也會被列印出來

標頭檔案:#include

函式原型:void _exit(int status)

//status定義了程序的終止狀態,父程序通過wait來獲取該值

ps:雖然status是int,但是僅有低8位可以被父程序所用,

所以_exit(-1_時,在終端執行$?發現返回值是255

功能:直接使程序停止執行,清除其使用的記憶體

空間,並清除其在核心的各種資料結構。

**:

#include

#include

int main()

執行結果:

-bash-4.1

$ ./a.out

-bash-4.1$

ps: 由執行結果可看出,_exit()函式是直接終止程序,並未將緩衝i/o內容清理掉,所以不會被列印出來

}執行結果:

-bash-4.1$ ./a.out 

this is _exit process.

-bash-4.1$ this is

exit

process.

exit test

由此可看出,exit()會在程序終止前,將緩衝i/o內容清理掉,所以即使printf()函式裡沒有」\n」也會printf()的內容,而_exit()函式是直接終止程序,並未將緩衝i/o內容清理掉,所以不會被列印出來

exit()函式和_exit()函式最大的區別:

exit()函式在呼叫之前,會檢查檔案的開啟情況,把檔案緩衝區的內容寫會檔案,

而_exit()函式則不會進行任何操作,只是單純的退出程序。

ps:exit()最後也會呼叫_exit(),但是呼叫exit()之前,還做了其他工作:

(1)執行使用者通過atexit或on_exit定義的清理函式;

(2)關閉所有開啟的流,所有的快取資料均被寫入;

(3)呼叫_exit().

return是一種更為常見的退出程序方法,執行return n等同於執行exit(n),

因為呼叫main的執行時函式會將main的返回值當做exit的引數

ps: printf函式使用的是緩衝i/o方式,該函式在遇到」\n」換行符時自動從緩衝區中將記錄讀出

linuxC庫函式 exit和exit的區別

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

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...