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命令报错还是处理正确的。
    这个命令使用比较方便,但有一定的局限性。
  • 相关阅读:
    LowercaseRoutesMVC ASP.NET MVC routes to lowercase URLs
    Asp.net MVC Combres的简单用法
    原码, 反码, 补码 详解
    四种数据存储结构---顺序存储 链接存储 索引存储 散列存储
    快速排序时间复杂度为O(n×log(n))的证明
    进程与线程及其区别
    linux c语言定时器
    平衡二叉查找树的一些知识总结
    C++编程练习(17)----“二叉树非递归遍历的实现“
    C++编程练习(16)----“排序算法 之 快速排序“
  • 原文地址:https://www.cnblogs.com/learn-my-life/p/4899981.html
Copyright © 2011-2022 走看看