Linux命令列解析函式getopt()
阿新 • • 發佈:2019-02-18
#include <srdio.h> #include <unistd.h> int main(int argc, char *argv[]) { int ch; while((ch = getopt(argc, argv, "ab:c::d")) != -1){ switch(ch){ case 'a': print("a, no opt"); break; case 'b': print("b, opt:", optarg); break; case 'c': print("c, opt:", optarg); break; case 'd': print("d, no opt"); break; default: print("opt err"); } } return 0; }
輸出:
./a.out -a x
a, no opt
./a.out -a -b x
a, no opt
b, opt: x
./a.out -ab x -c xx
a, no opt
b, opt: x
c, opt: //xx應緊跟c後面
./a.out -adb x -cxx
a, no opt
d, no opt
b, opt: x
c, opt: xx
1. getopt函式的宣告
該函式是由Unix標準庫提供的函式,檢視命令man 3 getopt
#include <unistd.h> int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg; extern int optind, opterr, optopt;
getopt函式的引數:
- 引數argc和argv:通常是從main的引數直接傳遞而來,argc是引數的數量,argv是一個常量字串陣列的地址。
- 引數optstring:一個包含正確選項字元的字串,如果一個字元後面有冒號,那麼這個選項在傳遞引數時就需要跟著一個引數。
外部變數:
- char *optarg:如果有引數,則包含當前選項引數字串
- int optind:argv的當前索引值。當getopt函式在while迴圈中使用時,剩下的字串為運算元,下標從optind到argc-1。
- int opterr:這個變數非零時,getopt()函式為“無效選項”和“缺少引數選項,並輸出其錯誤資訊。
- int optopt:當發現無效選項字元之時,getopt()函式或返回 \’ ? \’ 字元,或返回字元 \’ : \’ ,並且optopt包含了所發現的無效選項字元。