Linux 提供的系統調用API,一般會在失敗的時候返回 -1。若是想獲取更多更詳細的報錯信息,須要藉助全局變量 errno 和 perror 函數:web
#include <stdio.h> void perror(const char *s); #include <errno.h> const char *sys_errlist[]; int sys_nerr; int errno;
代碼執行過程當中發生錯誤時,Linux 會將 errno 這個全局變量設置爲合適的值。errno 就是一個整數,對應系統中預先定義好的一個提示字符串。數組
perror 函數會讀取 errno,而後找到預約義的提示字符串,最後將參數字符串、已定義的提示字符串拼接到一塊兒,中間用冒號加空格分隔。至關於給錯誤信息加的註釋。svg
#include <stdio.h> #include <errno.h> #include <fcntl.h> int main() { char name[] = "non-exists.txt"; int ret = open(name, O_RDONLY); if (ret < 0) { printf("%d\n", errno); perror("this is my error"); } return 0; }
報錯提示爲:函數
2 this is my error: No such file or directory
C 程序的入口是 main 函數,其完整寫法是包含兩個參數的:this
int main(int argc, char* argv[]);
其中第一個參數是命令行參數的個數,第二個參數是命令行參數數組。spa
例以下面這段代碼:命令行
#include <stdio.h> int main(int argc, char* argv[]) { printf("argc is: %d\n", argc); printf("argv[0] is: %s\n", argv[0]); }
執行的命令默認是第一個參數,因此無任何參數時的輸出爲:code
argc is: 1 argv[0] is: ./a.out
能夠藉助 argc 來遍歷全部的參數:xml
#include <stdio.h> int main(int argc, char* argv[]) { int i; printf("argc is: %d\n", argc); for (i = 0; i < argc; i++) { printf("argv[%d] is: %s\n", i, argv[i]); } }
執行命令,同時傳入參數:token
# ./a.out 666 hello world test haha argc is: 6 argv[0] is: ./a.out argv[1] is: 666 argv[2] is: hello argv[3] is: world argv[4] is: test argv[5] is: haha