無論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值就代表執行失敗。
沒有留言:
張貼留言