1. 程式人生 > >Linux命令列解析函式getopt()

Linux命令列解析函式getopt()

#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包含了所發現的無效選項字元。