【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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM