1. 程式人生 > >linux命令列引數解析學習心得

linux命令列引數解析學習心得

轉載出處:blog.csdn.net/bailyzheng/article/details/8048733

最近用到一個命令列工具,之前也一直說想把命令列引數解析看一下,今天算是做一個小的總結。

命令列引數解析分類:單個字元的引數(-a -b),還有字串引數(--video --audio)

函式宣告:int getopt(int argc, char * const argv[], const char *optstring); 

可以解析單個字元選項, optstring通常寫成“a:b:c:”這種形式的。

用法:

1.前兩個引數好理解,直接傳入main(int argc,char **argv)中的兩個引數就可以了。第三個引數寫成我們需要的選項字串就可以。

2.函式返回值:當匹配到的時候返回相應的字元常量,匹配完成之後返回-1.沒有匹配到返回‘?’.

3.通常我們對返回值用一個switch做判斷,然後接上相應的處理就可以了。

函式宣告:int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);

這個函式和上面函式差不多,但是可以支援長選項的命令列解析。比如“--video”之類的。

用法:

1.同樣的使用,optstring是選項引數字串。

2.struct option 是用來定義長選項的。定義如下:

struct option{

    char *name;

    int has_arg;

    int *flag;

    int val;

}

通常這個結構體我們這樣寫

strutc option options{

{"video", required_argument, NULL, 'v'};

{NULL, 0, NULL, 0};

}

這句話的意思就是

(1).定義了一個長選項“video”(注意這裡不需要加一對短橫線。),

(2).required_argument數值為1表示選項後面需要加引數。

(3).NULL表示,匹配到符合的選項之後,函式返回的是val也就是最後一個引數的值。

(4).最後一個引數'v'表示的意思就是,假如有短選項'-v',那麼命令列輸入-v與--video表示的是一個意思,如果這個長選項沒有對應的短選項一致的話,那就寫0就可以了。

3.longindex這個引數我們一般可以寫成NULL,但是有時候我們需要知道這個值,比如,我們--video; --video-format;  --video-color;有著三個可選的長選項,那麼對於後面兩者而言,getopt_long返回值都是0,那麼我們怎麼區分呢,這時候可以通過options[longindex].name來區分是video-format 還是video-color,所以這個時候這個引數就有很重要的用處了。

好了,大體上的這兩個命令列的解析函式就分析到這了,接下來再寫一篇關於匹配命令列引數的正則表示式的文章。