getopt函式和getopt long函式詳解

2021-07-10 22:22:14 字數 2008 閱讀 1398

getopt函式

函式功能:用來解析命令列引數,引數argc和argv分別代表引數個數和內容,跟main()函式裡的命令列引數一樣

函式所在標頭檔案:#include

函式原型定義:int getopt(int argc, char* const argv[ ], const char *optstring )

引數optstring: 為選項字串,告知getopt可以處理那個選項以及哪個選項需要引數,如果選項字串裡的字母後接著冒號:「:」,則表示還有相關的引數,全域變數optarg即會指向此額外引數,如果在處理期間遇到了不符合optstring指定的其他選項,getopt()將會顯示乙個錯誤訊息,並將全域性域變數設定為「?」字元,將全域性域變數opterr設定為0則將不會列印出錯資訊。

extern char* optarg;

extern int optind, opterr, optopt;

引數optarg:指向當前選項引數的指標

引數optopt:表示最後乙個未知選項

引數optstring: 比如getopt(argc, argv, "td:ch:q::")

1. 單個字元,表示選項,這裡一共有t、d、c、h、q五個選項

2. 單個字元後接乙個冒號「:」表示該選項後必須跟乙個引數,引數緊跟在選項後或者以空格隔開

3. 單個字元後跟兩個冒號,表示該選項後可以跟乙個引數,也可以不跟,如果後邊跟乙個引數,引數必須緊跟在選項後不能以空格隔開。

#include #includeint main(int argc, char *argv)		}

return 0;

}

筆記本測試效果截圖:

getopt_long函式

函式功能:支援長選項的命令解析

函式所在標頭檔案:#include

函式原型定義:

int getopt_long(int argc, char * const argv,const char *optstring, const struct option *longopts,int *longindex)

引數optstring: 為選項字串,告知getopt_long可以處理那個選項以及哪個選項需要引數,如果選項字串裡的字母後接著冒號:「:」,則表示還有相關的引數,全域變數optarg即會指向此額外引數,如果在處理期間遇到了不符合optstring指定的其他選項,getopt_long()將會顯示乙個錯誤訊息,並將全域性域變數設定為「?」字元,將全域性域變數opterr設定為0則將不會列印出錯資訊。

引數longopts:

struct option

舉個例子:

struct option long_options = ,,};

現在,如果命令列的引數是-a 123,那麼呼叫getopt_long()將返回字元'a',並且將字串123由optarg返回(注意注意!字串123由optarg帶回!optarg不需要定義,在getopt.h中已經有定義),那麼,如果命令列引數是-c,那麼呼叫getopt_long()將返回字元'c',而此時,optarg是null。最後,當getopt_long()將命令列所有引數全部解析完成後,返回-1。

required_argument(或者是1)時,引數輸入格式為:--引數 值 或者 --引數=值。

optional_argument(或者是2)時,引數輸入格式只能為:--引數=值。

引數longindex: 表示當前長引數在longopts中的索引值

extern char* optarg;

extern int optind, opterr, optopt;

引數optarg:指向當前選項引數的指標

引數optind:再次呼叫getopt_long時的下乙個argv指標索引

引數optopt:表示最後乙個未知選項

引數optstring: 同上

具體用法可以詳見開源原始碼研究:

getopt函式和getopt long函式

預備知識 1.getopt getopt在unix下的命令列程式特別好用,特別是在你有許多引數要加入時。表頭檔案 i nclude 函式宣告 int getopt int argc,char const argv,const char optstring 函式說明 getopt 用來分析命令列引數。...

getopt和getopt long函式使用詳解

getopt和getopt long函式使用詳解 在我們操作命令行的時候,main函式中輸入引數乙個乙個分析不免麻煩,我們可以使用linux的引數分析函式解決此問題方便省力。include int getopt int argc,char const argv,const char optstrin...

getopt函式分析

函式getopt主要用於拆分命令列引數,用這個函式就不自己寫命令列引數解析程式了,以下 摘自tcpdump原始碼,對這個函式比較感興趣,故對此進行分析注釋,因水平實在不敢恭維,不足之處希望能一起 函式getopt 有三個引數,nargc,nargv就是命令列傳過來的argc和argv字串ostr,它...