無論return或是exit()都可以帶一個回傳值,回傳值就代表了這個Function或是Process的狀態碼 (Status Code)。這個狀態碼的觀念會帶到將來后面所要提到的fork() Parent-Child Process (父子程序)。
功能說明:正常結束行程。
標頭檔:#include <stdlib.h>
函式宣告:void exit(int status);
回傳值:(NONE).
函式簡述:int status系統中已經有預設了2個,它們也是定義在stdlib.h中,
#define EXIT_SUCCESS 0 #define EXIT_FAILURE 1但我們也不是只能用這2個,我們也可以傳入其它的值。
範例:
// main.c #include <stdlib.h> int main(argc, argv, envp) int argc; char *argv[]; char **envp; { switch (atoi(argv[1])) { case 0: return 0; case 1: return 1; case 2: return 2; case 3: exit(EXIT_SUCCESS); case 4: exit(EXIT_FAILURE); case 5: exit(5); default: break; } }在switch()-case中我們已經直接使用return或exit()了,所以就不加上"break;"關鍵字 (因為加了也沒任何意義)。
那我們該如何查驗這支程序的狀態碼?? 可以善用Shell Script的指令:"echo $?",指令的意思就是指「輸出『上一個指令的回傳值』」。
[root@localhost ~]# ./main 0; echo $?
0
[root@localhost ~]# ./main 1; echo $?
1
[root@localhost ~]# ./main 2; echo $?
2
[root@localhost ~]# ./main 3; echo $?
0
[root@localhost ~]# ./main 4; echo $?
1
[root@localhost ~]# ./main 5; echo $?
5
因為這個範例還蠻簡單的,筆者也確實在Linux系統上執行過,所以就不抓圖了。如此也不難理解為何在Linux系統上,大部份的指令 (或是程序)的回傳值是0了,因為0就代表了執行成功;非0值就代表執行失敗。
沒有留言:
張貼留言