exit()函數詳解和Exit() 和 Return() 的差別

exit(0) 表示程式正常, exit(1)/exit(-1)表示程式異常退出
exit() 結束當前進程/當前程式/,在整個程式中,只要調用 exit ,就結束
return() 是當前函數返回,當然如果是在主函數main, 自然也就結束當前進程了,如果不是,那就是退回上一層調用。在多個進程時.如果有時要檢測上進程是否正常退出的.就要用到上個進程的返回值..
exit(1)表示進程正常退出. 返回 1;
exit(0)表示進程非正常退出. 返回 0.
進程環境和進程控制(1): 進程的開始和終止
1. 進程的開始:
C程式是從main函數開始執行, 原型如下:
int main(int argc, char *argv[]);
通常main的返回值是int型, 正確返回0.
如果main的返回值爲void或無, 某些編譯器會給出警告, 此時main的返回值通常是0.
關於main的命令行參數不做過多解釋, 以下面的程式展示一下:
#include
int main(int argc, char *argv[])
{
     int i;
     for (i = 0; i #include     /* ISO C */
void exit(int status);
void _Exit(int status);
#include     /* POSIX */
void _exit(int status);
以上3個函數的差別是:
exit()(或return 0)會調用終止處理程式和用戶空間的標準I/O清理程式(如fclose), _exit和_Exit不調用而直接由內核接管進行清
理.
因此, 在main函數中exit(0)等價於return 0.
3. atexit終止處理程式:
ISO C規定, 一個進程最對可登記32個終止處理函數, 這些函數由exit按登記相反的順序自動調用. 如果同一函數登記多次, 也會被
調用多次.
原型如下:
#include
int atexit(void (*func)(void));
其中參數是個函數指針, 指向終止處理函數, 該函數無參無返回值.
以下面的程式爲例:
#include
static void myexit1()
{
     printf("first exit handler\n");
}
static void myexit2()
{
     printf("second exit handler\n");
}
int main()
{
     if (atexit(my_exit2) != 0)
         printf("can’t register my_exit2\n");
     if (atexit(my_exit1) != 0)
         printf("can’t register my_exit1\n");
     if (atexit(my_exit1) != 0)
         printf("can’t register my_exit1\n");
     printf("main is done\n");
     return 0;
}


運行結果:
$ ./a.out
main is done
first exit handler
first exit handler
second exit handler運行結果:
$./a.out arg1 arg2 arg3
argv[0]: ./a.out
argv[1]: arg1
argv[2]: arg2
argv[3]: arg3
               
               
               

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/60641/showart_488225.html

發佈了16 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章