getopt 函式分析

2021-07-11 04:55:52 字數 2142 閱讀 5237

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 -a

other 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 則代表欲處理...