閱讀535 返回首頁    go 阿裏雲 go 技術社區[雲棲]


初步理解getopt函數

getopt函數為C語言程序中提供命令行開關的標準程序接口。實際作用是解析命令行參數。

#include<unistd.h>

int getopt(int argc,char *const argv[],const char *opstring);
extern char *optarg;
extern int optind,opterr,optopt;

getopt函數將傳遞給程序mian()函數的argc,argv作為參數,同時接受一個指定指定符字符串optstring。函數getopt()認為optstring中,以‘-’開頭的字符為命令行參數選項,有的參數選項後麵可以跟參數值,optstring中的格式規範如下:
1) 單個字符,表示選項,
2) 單個字符後接一個冒號”:”,表示該選項後必須跟一個參數值。參數緊跟在選項後或者以空格隔開。該參數的指針賦給optarg。
3) 單個字符後跟兩個冒號”::”,表示該選項後必須跟一個參數。參數必須緊跟在選項後不能以空格隔開。該參數的指針賦給optarg。(這個特性是GNU的擴張)。

getopt(argc,argv,"ab:cd");

上麵例子允許幾個選項-a -b -c -d 其中-b 後麵需要跟一個參數 

那麼解析命令行參數通常通過循環來一次得到每個選項。

如果選項中有這個關聯值,那麼就是上麵提到的外部變量optarg來指向這個值。

如果選項處理完畢那麼函數getopt返回-1,特殊參數“--”將使getopt停止掃描選項。

如果遇到無法識別的選項,getopt返回一個問號(?),並保存到外部變量optopt中。

如果一個選項要求有一個關聯值(例如上麵例子的-b),但是用戶沒有提供這個值,getopt通常返回一個問號(?),如果我們將字符串第一個字符設置為冒號(:),那麼用戶將在用戶沒提供值的情況下返回冒號(:),而不是問號(?)。

現在我們已知的變量有optarg(指向外部變量),optopt保存無法識別的參數項,還有optind,為下一個待處理參數的所以。getopt用他來記錄自己的進度。此外還有些getopt版本會在遇到未知選項時打印出錯信息。如果opterr變量是非零值,getopt就會向stderr打印一條出錯信息。

最後更新:2017-04-03 12:55:24

  上一篇:go Java 設計模式 接口型模式 之 類型介紹 (一)
  下一篇:go Sql Server 取出多個字段列中的最大值和最小值