1. 程式人生 > >【C】C語言中的_exit()與exit()

【C】C語言中的_exit()與exit()

_exit()和exit()主要區別是一個退出程序會清理I/O緩衝區,一個直接結束程序進入到核心中

舉例說明:

 1 #include <stdio.h>
 2 
 3 
 4 /*demo01   程式只輸出 hello world*/
 5 /*
 6 int main()
 7 {
 8     printf("hello world\n");
 9     printf("hello world");
10     _exit(0);
11 }
12 */
13 
14 /*demo02   程式輸出  hello world
15                       hello world 
*/ 16 /* 17 int main() 18 { 19 printf("hello world\n"); 20 printf("hello world\n"); 21 _exit(0); 22 } 23 */ 24 25 /*demo03 程式只輸出 hello world*/ 26 /* 27 int main() 28 { 29 printf("hello world\n"); 30 printf("hello world"); 31 exit(0); 32 } 33 */ 34 35 /*demo04 程式輸出 hello world 36 hello world
*/ 37 /* 38 39 int main() 40 { 41 printf("hello world\n"); 42 printf("hello world\n"); 43 exit(0); 44 }

解釋:

printf函式就是使用的是緩衝I/O的方式,該函式在遇到“\n“換行符時自動的從緩衝區中將記錄讀出。所以exit()將緩衝區的資料寫完後才能退出來,所以呼叫exit()函式後程序並不會馬上退出,這就是有些出現的殭屍程式,而_exit是直接退出進入到核心中去。

return是語言級別的,它表示了呼叫堆疊的返回;而exit是系統呼叫級別的,它表示了一個程序的結束。

return是返回函式呼叫,如果返回的是main函式,則為退出程式。   
exit是在呼叫處強行退出程式,執行一次程式就結束   

exit(1)表示異常退出.這個1是返回給作業系統的不過在DOS好像不需要這個返回值。   
exit(0)表示正常退出   

無論寫在那裡,都是程式退出,dos和windows中沒有什麼不一樣,最多是系統處理的不一樣。   
數字0,1,-1會被寫入環境變數ERRORLEVEL,其它程式可以由此判斷程式結束狀態。   
一般0為正常退出,其它數字為異常,其對應的錯誤可以自己指定。   


返回給作業系統的,0是正常退出,其他值是異常退出,在退出前可以給出一些提示資訊,或在除錯程式中察看出錯原因.

 

參考:https://blog.csdn.net/yyfwd/article/details/50548359