• getopt和getopt_long函数的使用


    一. 参考网址

      1. Linux中getopt函数、optind等变量使用详解

      2. Linux 命令行参数解析

      3. getopt_long(3) - Linux man page

    二. 实战

      1. 函数原型 

        参考文档:inux 命令行参数解析

        1)getopt函数

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

    optstring,是短选项的规则声明,形式如"a:b::cd:",分别表示程序支持的命令行短选项有-a、-b、-c、-d,冒号含义如下:

    1. 只有一个字符,不带冒号——只表示选项, 如-c.
    2. 一个字符,后接一个冒号——表示选项后面带一个参数,如-a 100 或 -a100.
    3. 一个字符,后接两个冒号——表示选项后面带一个可选参数,即参数可有可无,如果带参数,则选项与参数直接不能有空格形式,应该型如-b200. 这里就能解释为什么有时候带参数需要空格,有时候确不需要空格的原因了. 很好理解,不需要空格是因为其参数可选,有空格的话没法判断其是否携带参数。
    4. 有时也会出现形如:a:b::cd:的optstring,其第一个字符是冒号表示如果参数解析过程中,出现参数丢失的情况,则返回值返回":",而不是"?"。方便后续程序区别是选项出错还是参数出错;

      2)在getopt.h中,也定义如下几个全局变量:

    char *optarg —— 指向当前选项参数(如果有参数的话)的指针。ps: 当前选项由返回值传递;
    int optind —— 再次调用 getopt() 时的下一个 argv 指针的索引。
    int optopt —— 最后一个未知选项。一般当出现未知选项,或缺少参数时,它就会保存这个未知选项。
    int opterr ­—— 如果不希望getopt()打印出错信息,则只要将该全局变量opterr设为0即可。

      3)getopt_long函数

    int getopt_long(int argc, char * const argv[],
               const char *optstring,
               const struct option *longopts, int *longindex);

    同样的,argc和argv和main函数的两个参数一致,分别表示命令行参数个数和保存参数的字符串数组;optstring,是短选项的规则声明;
    不同的是getopt_long()有两个解析长参数用到的参数变量;

      • longopts 参数变量是用来描述长选项解析方案的,需要在调用前定义好;例如
    static struct option longopts[] = {
        {"help", no_argument, NULL, 'h'},
        {"module", required_argument, NULL, 'm'},
        {"set", required_argument, NULL, 's'},
        {"get", no_argument, NULL, 'g'},
        {"wakelock", required_argument, NULL, 'l'},
        {"wakeunlock", required_argument, NULL, 'u'},
        {0, 0, 0, 0}
    };
     
    这个option结构体,定义如下:
    struct option
    {
        const char *name;//长选项名
        int has_arg;//是否需要参数
        int *flag;
        int val;
    };

      

  • 相关阅读:
    Oracle插入特殊字符问题
    Oracle数据库中IN参数个数超过1000的问题
    解决tomcat 内存溢出问题
    IDEA 最新版本 破解教程(windows,mac皆可用)(新版本已失效)
    javascript将字符串中的多个空格替换为一个空格的正则实例
    删除一个表中重复的数据
    mac/linux 解决启动命令行出现declare问题
    iftop 安装以及相关参数及说明(转载自csdn)
    centos安装与卸载postgresql
    jquery实现自动补全邮箱地址
  • 原文地址:https://www.cnblogs.com/shanyu20/p/15480748.html
Copyright © 2020-2023  润新知