return/exit/—exit三種返回方式的區別

主要的區別如下:

1.exit()函數與_exit()函數最大的區別就在於exit()函數在調用exit系統調用之前要檢查文件的打開情況,把文件緩衝區中的內容寫回文件。

2.exit用於結束正在運行的整個程序,它將參數返回給OS,把控制權交給操作系統;而return 是退出當前函數,返回函數值,把控制權交給調用它的函數exit是系統調用級別,它表示一個進程的結束;而return 是語言級別的,它表示調用堆棧的返回。在main函數結束時,會隱式地調用exit函數,所以一般程序執行到main()結尾時,則結束主進程。exit將刪除進程使用的內存空間,同時把錯誤信息返回給父進程。


深入瞭解:

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

exit()函數定義在stdlib.h中,而_exit()定義在unistd.h中。exit()和_exit()都用於正常終止一個函數。但_exit()直接是一個sys_exit系統調用,而exit()則通常是普通函數庫中的一個函數。它會先執行一些清除操作,例如調用執行各終止處理函數、關閉所有標準IO等,然後調用sys_exit。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章