【Linux 應用編程】基礎知識

錯誤提示

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;

全局變量 errno

代碼執行過程當中發生錯誤時,Linux 會將 errno 這個全局變量設置爲合適的值。errno 就是一個整數,對應系統中預先定義好的一個提示字符串。數組

perror 函數

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
相關文章
相關標籤/搜索