getopt函式和getopt long函式

2021-05-23 20:25:19 字數 2935 閱讀 7021

預備知識:

1.getopt()

getopt在unix下的命令列程式特別好用,特別是在你有許多引數要加入時。

表頭檔案:#i nclude

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

函式說明:getopt()用來分析命令列引數。引數argc和argv是由main()傳遞的引數個數和內容。引數optstring 則代表欲處理的選項字串。此函式會返回在argv 中下乙個的選項字母,此字母會對應引數optstring 中的字母。如果選項字串裡的字母後接著冒號「:」,則表示還有相關的引數,全域變數optarg 即會指向此額外引數。如果getopt()找不到符合的引數則會印出錯資訊,並將全域變數optopt設為「?」字元,如果不希望getopt()印出錯 資訊,則只要將全域變數opterr設為0即可。

返回值:如果找到符合的引數則返回此引數字母,如果引數不包含在引數optstring 的選項字母則返回「?」字元,分析結束則返回-1。

2.getopt_long()                                       

分析命令列選項是一件繁瑣的工作。幸運的是gnu c庫提供了乙個函式使你在處理這項工作時能簡單一點。這個函式是getopt_long,它能理解長短兩種選項。

要使用getopt_long,你必須提供兩個資料結構。頭乙個是包含有效短選項的字串,每個選項乙個字元。需要引數的選項後面放乙個冒號。比如我們的程式,這個字串為ho:v,表示有效選項是-h,-o與-v並且第二個引數-o後面需要乙個引數。

要 指定可用的長選項,你要構建乙個option結構的陣列。每個元素對應乙個長選項,並有四個域。一般情況下,第乙個域是長選項的名字(乙個字串,不包含 兩個連字元),第二個域如果是1表示這個選項接受乙個引數,如果為0表示沒有引數。第三個是null,第四個是乙個字元常量指出與這個長選項對應的短選 項。最後的陣列元素全部域應該都為0.

呼叫getopt_long時,向它傳遞main的引數argc,argv,描述短選項的字串與描述長選項的option結構陣列。

*每呼叫getopt_long一次,它分析乙個選項,返回這個選項的短選項字母,如果沒有發現選項則返回-1.

*典型情況下,我們在乙個迴圈中呼叫getopt_long,來處理所有使用者指定的選項,並通過乙個switch語句來處理特別的選項。

*如果getopt_long遇到乙個無效選項,它將列印乙個錯誤資訊並返回字元'?'。大多數程式將因此退出,並顯示用法提示。

*在處理需要引數的選項時,全域性變數optarg指向這個引數正文。

*當getopt_long完全全部選項分析時,全域性變數optind包含第乙個非選項引數在argv中的索引。

程式清單1(getopt函式):

編譯執行程式及輸出結果如下:

obe-240 eagle/test> gcc -o getopt getopt.c

obe-240 eagle/test> ./getopt

usage:./getopt [-a value][-b value][-c value][-d] arglist...

obe-240 eagle/test> ./getopt -a hello

a option:hello

obe-240 eagle/test> ./getopt -b world

b option:world

obe-240 eagle/test> ./getopt -c eagle

c option:eagle

obe-240 eagle/test> ./getopt -d

d option:(null)

obe-240 eagle/test> ./getopt first seconde -a helloworld           #attention!#

a option:helloworld

obe-240 eagle/test> ./getopt -e

./getopt: invalid option -- e

illegal option:(null)

程式清單(getopt_long函式):

編譯並執行程式:

longmenyu@longmenyu-vostro-1088:~/code$ gcc -o getopt_long getopt_long.c

longmenyu@longmenyu-vostro-1088:~/code$ ./getopt_long -h

usage:./getopt_long options [inputfile...]

-h --help:            display this usage information.

-o --output filename: write output to file.

-v --verbose:         print verbose message.

longmenyu@longmenyu-vostro-1088:~/code$ ./getopt_long -o

./getopt_long: option requires an argument -- 'o'

usage:./getopt_long options [inputfile...]

-h --help:            display this usage information.

-o --output filename: write output to file.

-v --verbose:         print verbose message.

longmenyu@longmenyu-vostro-1088:~/code$ ./getopt_long -v hello world eagle

argument[2]:hello

argument[3]:world

argument[4]:eagle

getopt和getopt long函式使用詳解

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

getopt函式和getopt long函式詳解

getopt函式 函式功能 用來解析命令列引數,引數argc和argv分別代表引數個數和內容,跟main 函式裡的命令列引數一樣 函式所在標頭檔案 include 函式原型定義 int getopt int argc,char const argv const char optstring 引數op...

getopt函式分析

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