C 語言getopt與go語言flag擷取命令參數

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

C語言中的getopt()函數為命令參數的擷取提供了很大便利,與golang中的flag功能類似。

C語言getopt

     下面以ssh中擷取主機名稱/ip和使用者名稱為例來樣本如何使用getopt().
    int get_user_host(int ac, char **av, char *host, char *user){    char *p, *cp;    extern int optind;    int opt;    again:    while ((opt = getopt(ac, av, "1246AaCfgKkMNnqsTtVvXxYyb:c:D:e:F:I:i:L:l:m:O:o:p:R:S:W:w:")) != -1){        switch (opt){        case '1':            break;        case '2':            break;        case '4':            break;        case '6':            break;        case 'A':            break;        case 'a':            break;        case 'C':            break;        case 'f':            break;        case 'g':            break;        case 'K':            break;        case 'k':            break;        case 'M':            break;        case 'N':            break;        case 'n':            break;        case 'q':            break;        case 's':            break;        case 'T':            break;        case 't':            break;        case 'V':            break;        case 'v':            break;        case 'X':            break;        case 'x':            break;        case 'Y':            break;        case 'y':            break;        case 'b':            break;        case 'c':            break;        case 'D':            break;        case 'e':            break;        case 'F':            break;        case 'I':            break;        case 'i':            break;        case 'L':            break;        case 'l':            break;        case 'm':            break;        case 'O':            break;        case 'o':            break;        case 'p':            break;        case 'R':            break;        case 'S':            break;        case 'W':            break;        case 'w':            break;        default:            return -3;        }    }    ac -= optind;    av += optind;    if (ac > 0 && strlen(host)==0 &&  **av != '-') {        if (strrchr(*av, '@')) {            p = strdup(*av);            cp = strchr(p, '@');            if (cp == NULL || cp == p){                printf("can not find username nearby @");                printf("\n");                return -1;;            }            *cp = '\0';            user = strcpy(user, p);            host = strcpy(host,++cp);        } else{            host = strcpy(host, *av);        }       if (ac >1 ){          optind  = 1;          goto again;       }       ac--, av++;     }    if (strlen(host)==0){        printf("can not find host address in parameters");        printf("\n");        return -2;    }return 0;}

go語言flag

    go的flag相比於c的getopt使用起來簡單很多。
cfgPath := flag.String("c","/etc/cfg.toml","cfg path")nowaitFlag :=flag.Bool("w",false,"do not wait")

函數中第一個命令是"-c"、"-w"中的指示詞,第二個為預設值,第三個為說明。無論順序,只要正常出現就能解析。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.