初步理解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