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命令报错还是处理正确的。
    这个命令使用比较方便,但有一定的局限性。
  • 相关阅读:
    discuz X3.2 自定义系统广告详解
    windows平台myeclipse+PDT+apache+xdebug调试php
    南浮的IT民工
    linux实践——编译安装两个apache
    如何使maven+jetty运行时不锁定js和css[转]
    linux实践——ubuntu搭建 svn 服务
    测试代码插件(插入代码块)
    FTP 文件接口按天批处理脚本实例
    7月份工作小结
    报表开发过程
  • 原文地址:https://www.cnblogs.com/learn-my-life/p/4899981.html
Copyright © 2011-2022 走看看