zoukankan      html  css  js  c++  java
  • getopt使用例子

    getopt是linux下获取程序启动参数的函数
           #include <unistd.h>

           int getopt(int argc, char * const argv[],
                      const char *optstring);

           extern char *optarg;
           extern int optind, opterr, optopt;
    使用了全局参数optarg, optind,opterr, optopt这几个,其中optarg用来保存解析出来的选项参数
    下面是一个例子
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    using namespace std;

    int main(int argc, char** argv)
    {
        int opt = 0;

        while(-1  !=  (opt = getopt(argc, argv, "n:t:kl")))
        {
            switch(opt)
            {
                case 'n':
                    fprintf(stdout, "n:%s ", optarg);
                break;
                case 't':
                    fprintf(stdout, "t:%s ", optarg);
                break;
                case 'k':
                    fprintf(stdout, "k option get ");
                break;
                case 'l':
                    fprintf(stdout, "l option get ");
                break;
            }
        }

        return 0;
    }
    这段代码意图解析带有参数和不带有参数的命令选项,其中n和t和带有参数的,k和l是不带有参数的,getopt通过识别第三个参数的格式来区分,n和t后面有冒号,表示选项带有参数,k和l没有。
    测试一下这段代码对符合要求的命令行的解析和不符合要求的命令行的解析
    smi /project/bm3.5/smi/test/zd/self>tg   -n 100 -t  vi  -k 30  -l 80
    n:100
    t:vi
    k option get
    l option get
    smi /project/bm3.5/smi/test/zd/self>tg   -n 100 -t  vi  -k   -l
    n:100
    t:vi
    k option get
    l option get
    smi /project/bm3.5/smi/test/zd/self>tg   -n 100 -t   -k   -l
    n:100
    t:-k
    l option get
    smi /project/bm3.5/smi/test/zd/self>tg -n
    tg: option requires an argument -- n
    smi /project/bm3.5/smi/test/zd/self>tg -n -t
    n:-t
    smi /project/bm3.5/smi/test/zd/self>tg -o  -n 100
    tg: invalid option -- o
    n:100
    可以看到,解析不尽如人意,在k和l带有多余参数的时候没有报错,这个还可以理解,但在n和t命令少带参数的时候就应该报错,而不是把后面的命令作为参数给解析了。多余的o命令报错还是处理正确的。
    这个命令使用比较方便,但有一定的局限性。
  • 相关阅读:
    [敏捷软工团队博客]Beta阶段项目展示
    [敏捷软工团队博客]Beta阶段使用指南
    [敏捷软工团队博客]Beta阶段测试报告
    [敏捷软工团队博客]Beta阶段发布声明
    [Beta]the Agiles Scrum Meeting 12
    [Beta]the Agiles Scrum Meeting 11
    [Beta]the Agiles Scrum Meeting 10
    [Beta]the Agiles Scrum Meeting 9
    [Beta]the Agiles Scrum Meeting 8
    2020BUAA-个人博客-案例分析
  • 原文地址:https://www.cnblogs.com/learn-my-life/p/4899981.html
Copyright © 2011-2022 走看看