getopt(分析命令列引數)
相關函式表頭檔案
#include
定義函式
int getopt(int argc,char * const argv[ ],const char * optstring);
函式說明
getopt()用來分析命令列引數。引數argc和argv是由main()傳遞的引數個數和內容。引數optstring 則代表欲處理的選項字串。此函式會返回在argv 中下乙個的選項字母,此字母會對應引數optstring 中的字母。如果選項字串裡的字母後接著冒號「:」,則表示還有相關的引數,全域變數optarg 即會指向此額外引數。如果getopt()找不到符合的引數則會印出錯資訊,並將全域變數optopt設為「?」字元,如果不希望getopt()印出錯資訊,則只要將全域變數opterr設為0即可。
短引數的定義
getopt()使用optstring所指的字串作為短引數列表,象"1ac:d::"就是乙個短引數列表。短引數的定義是乙個'-'後面跟乙個字母或數字,象-a, -b就是乙個短引數。每個數字或字母定義乙個引數。
其中短引數在getopt定義裡分為三種:
1. 不帶值的引數,它的定義即是引數本身。
2. 必須帶值的引數,它的定義是在引數本身後面再加乙個冒號。
3. 可選值的引數,它的定義是在引數本身後面加兩個冒號 。
在這裡拿上面的"1ac:d::"作為樣例進行說明,其中的1,a就是不帶值的引數,c是必須帶值的引數,d是可選值的引數。
在實際呼叫中,'-1 -a -c cvalue -d', '-1 -a -c cvalue -ddvalue', '-1a -ddvalue -c cvalue'都是合法的。這裡需要注意三點:
1. 不帶值的引數可以連寫,象1和a是不帶值的引數,它們可以-1 -a分開寫,也可以-1a或-a1連寫。
2. 引數不分先後順序,'-1a -c cvalue -ddvalue'和'-d -c cvalue -a1'的解析結果是一樣的。
3. 要注意可選值的引數的值與引數之間不能有空格,必須寫成-ddvalue這樣的格式,如果寫成-d dvalue這樣的格式就會解析錯誤。
返回值
getopt()每次呼叫會逐次返回命令列傳入的引數。
當沒有引數的最後的一次呼叫時,getopt()將返回-1。
當解析到乙個不在optstring裡面的引數,或者乙個必選值引數不帶值時,返回'?'。
當optstring是以':'開頭時,缺值引數的情況下會返回':',而不是'?' 。
範例
#include執行:#include
int main(int argc, int *argv)
} printf("optopt +%c\n",optopt);
}
$ ./getopt -aother option :?
optopt +a
$ ./getopt -b
option b :b
optopt +
$ ./getopt -c
other option :c
optopt +
$ ./getopt -d
other option :d
optopt +
$ ./getopt -abcd
option a:'bcd'
optopt +
$ ./getopt -bcd
option b :b
other option :c
other option :d
optopt +
$ ./getopt -bcde
option b :b
other option :c
other option :d
other option :e
optopt +
$ ./getopt -bcdef
option b :b
other option :c
other option :d
other option :e
other option :?
optopt +f
getopt函式分析
函式getopt主要用於拆分命令列引數,用這個函式就不自己寫命令列引數解析程式了,以下 摘自tcpdump原始碼,對這個函式比較感興趣,故對此進行分析注釋,因水平實在不敢恭維,不足之處希望能一起 函式getopt 有三個引數,nargc,nargv就是命令列傳過來的argc和argv字串ostr,它...
getopt 函式分析
我們知道,linux中在命令列下呼叫程式時,所使用的命令由三部分組成。比如 gcc o o hello hello.c 其中 1 gcc是 命令的名字,2 o是 可選字元,o也是可選字元,3 hello 和 hello.c就是命令列 引數。getopt 函式就是用來解析命令列引數和可選字元的。所以g...
getopt 函式 分析命令列引數
標頭檔案 include 定義函式 int getopt int argc,char const argv,const char optstring 函式說明 getopt 用來分析命令列引數。1 引數argc 和argv 是由main 傳遞的引數個數和內容。2 引數optstring 則代表欲處理...