1. 程式人生 > 實用技巧 >Linux -- C語言中的命令列解析函式getopt()

Linux -- C語言中的命令列解析函式getopt()

#include <unistd.h>//標頭檔案

int getopt(int argc, char * const argv[ ], const char * optstring);//函式宣告
agrc, argv[] —main()函式傳遞過來的函式
optstring: 一個包含準確選項字元的字串
返回值: 返回下一個選項, 當沒有引數的最後一次呼叫時, getopt()將返回 -1;當解析到一個不在optstring裡面的引數, 或者一個必選值引數不帶值時, 返回“ ?”。當optstring時以:開頭時, 缺值引數的情況下會返回":", 而不是“ ?”

extern char *optarg; —指向當前選項引數(如果有)

extern int optind;opterr,optopt//索引/錯誤輸出標誌、最後一個未知選項

int opterr — 這個變數非零時, 向stderr列印錯誤。預設為1.

引數optstring詳解
getopt()函式的第三個引數optstring時一個有所有合法的“可選字元”所組成
的字串。

  1. 單個字元,表示選項
  2. 單個字元後接一個冒號“:”, 表示該選項後必須跟一個引數值。引數緊跟在選項後或者以空格隔開。該引數的指標賦給optarg。
  3. 單個字元後跟兩個冒號“ ::”, 表示該選項後可以帶引數也可以不帶。但引數必須緊跟在選項後不能以空格隔開。該引數的指標賦給optarg。
    例子:”xy:z::“ 表示x選項沒有選項引數,y選項必須有選項引數, 中間可有空格可沒有, z引數可有引數選項, 也可沒有引數選項, 但是如果有選項引數的話必須緊跟在選項之後不能有空格。即
    -x -y yvalue(可帶空格可不帶) -d(若帶引數則不能有空格-ddvalue)
    注: 引數不分順序,不帶值的引數可以連寫
    例子
    在這裡插入圖片描述