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命令报错还是处理正确的。
    这个命令使用比较方便,但有一定的局限性。
  • 相关阅读:
    socket编程中最常用的几个数据类型和转换函数
    windows下给QT可执行文件(exe)一个图标
    fseek函数与ftell函数使用例程
    LINUX C例程1:sscanf的用法
    Linux进程控制——exec函数族
    Linux查看文件编码格式及文件编码转换
    oracle易忘函数用法(1)
    Oracle VARRAY的实际应用简介
    oracle 存储过程的基本语法 及注意事项
    何将ext中的FormPanel中,所有组件都居中放置?
  • 原文地址:https://www.cnblogs.com/learn-my-life/p/4899981.html
Copyright © 2011-2022 走看看