在談論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內容清理掉,所以不會被列印出來}執行結果:
由此可看出,exit()會在程序終止前,將緩衝i/o內容清理掉,所以即使printf()函式裡沒有」\n」也會printf()的內容,而_exit()函式是直接終止程序,並未將緩衝i/o內容清理掉,所以不會被列印出來-bash-4.1$ ./a.out
this is _exit process.
-bash-4.1$ this is
exit
process.
exit test
exit()函式和_exit()函式最大的區別:
exit()函式在呼叫之前,會檢查檔案的開啟情況,把檔案緩衝區的內容寫會檔案,ps:exit()最後也會呼叫_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...