ACE命令参数解析

2023-11-19

ACE提供了ACE_Get_Opt类来处理命令行参数选项:这个类是一个迭代器,用于解析按照自然数方式计数的参数向量;它包装了POSIX的getotp()函数的功能,但是与getopt()函数不同,ACE_Get_Opt类的每个实例都维护有自己的状态,所以它是可重入的;此外,ACE_Get_Opt类比getopt()函数更易于使用,因为选项定义字符串和参数向量只需要一次性地传递给ACE_Get_OPt类的构造函数,而不需要在每次调用迭代器时都进行传递;

ACE_Get_Opt;类可以解析两种命令行选项:

A:简单的单字符单选项,以单短划线("-")开头;

B:长选项,以双短划线("--")开头;比如--prefix;

ACE_Get_Opt类的实例使用operator()来迭代命令行选项;如果遇到单选项字符时,它直接返回该字符;如果遇到长选项时,它返回与该长选项等价的短选项字符;选项的参数通过opt_arg()方法返回;如果命令行所有选项都处理完毕,operator()返回EOF;

在处理argv数组中的元素时,ACE_Get_Opt类的实例会记住它在参数向量中的当前位置.当它发现需要参数的选项时,就会按照需要从当前的argv元素中的剩余字符中、或下一个argv元素中取出该选项的参数.但是,可选参数必须与选项字符处在同一个元素中.如果缺少必需的参数,这时的行为取决于短选项定义字符串的第一个字符.如果这个字符是':',那么operator()就会返回字符':';否则返回字符'?';

没有参数的短选项可以在开头的'-'之后被归结在一起,但是在这种情况下,只有组中最后一个选项可以有参数.如果operator()不认识这个短选项,那么就直接返回字符'?';

由于短选项被定义为整数,在正常情况下,没有有意义的等价短选项的长选项可以指定一个非字母与数字的值,作为相应的短选项.这些值不能出现在参数列表中,也不能出现在短选项定义串中,但是可以被返回.如:

cmd_opts.long_option(ACE_TEXT("cool_option"));

这条语句增加一个长选项--cool_option,并规定,如果命令行上指定了长选项--cool_option,那么operator()就返回0.

cmd_opts.long_option(ACE_TEXT("the_answer"),42);

这条语句增加了一个长选项--the_answer,并规定,如果operator()在命令行上遇到长选项--the_anwser,就要返回整数值42;

如果operator()在命令行上遇到内容为"--"的元素,那就表明选项区域已经结束,operator()就会返回EOF.如果opt_ind()返回的整数值小于命令行参数的数目argc,那就表明还有一些元素没有被解析;

改变ACE_Get_Opt的行为:

通过改变ACE_Get_Opt类的构造函数的默认值,就可以访问它的扩展功能.ACE_Get_Opt类的构造函数原型如下:

ACE_Get_Opt(int argc, ACE_TCHAR** argv, const ACE_TCHAR* optstring, int skip_args = 1, int report_errors = 0, int ordering = PERMUTE_ARGS, int long_only = 0);

参数skip_args指定从命令行中的那个参数位置处开始迭代解析.默认为1,表示从元素argv[1]处开始迭代解析,通常argv[0]中存放的是程序名称;

例子:

  
  
  1. #include "ace/Get_Opt.h"  
  2. #include "ace/Log_Msg.h"  
  3.  
  4. int ACE_TMAIN(int argc, ACE_TCHAR** argv)  
  5. {  
  6.  const ACE_TCHAR options[] = "f:F:s:S:vVhHdD";  
  7.  int opt = 0;  
  8.  ACE_Get_Opt cmd_opts(argc, argv, options);  
  9.  
  10.  cmd_opts.long_option(ACE_TEXT("config"), 'f', ACE_Get_Opt::ARG_REQUIRED);  
  11.  cmd_opts.long_option(ACE_TEXT("segment"), 's', ACE_Get_Opt::ARG_REQUIRED);  
  12.  
  13.  cmd_opts.long_option(ACE_TEXT("CONFIG"), 'f', ACE_Get_Opt::ARG_REQUIRED);  
  14.  cmd_opts.long_option(ACE_TEXT("SEGMENT"), 's', ACE_Get_Opt::ARG_REQUIRED);  
  15.  
  16.  while((opt = cmd_opts()) != EOF)  
  17.  {  
  18.   switch(opt)  
  19.   {  
  20.    case 'f':  
  21.    case 'F':  
  22.     {  
  23.      ACE_DEBUG( (LM_INFO, ACE_TEXT("File: -fF[%d]: %s\n"),
  24.  cmd_opts.opt_ind(), cmd_opts.opt_arg()) );  
  25.     }  
  26.     break;  
  27.  
  28.    case 's':  
  29.    case 'S':  
  30.     {  
  31.      ACE_DEBUG( (LM_INFO, ACE_TEXT("Segment: -sS[%d]: %s\n"),
  32.  cmd_opts.opt_ind(), cmd_opts.opt_arg()) );  
  33.     }  
  34.     break;  
  35.  
  36.    case 'v':  
  37.    case 'V':  
  38.     {  
  39.      ACE_DEBUG( (LM_INFO, ACE_TEXT("Version: -vV[%d]: %s\n"),
  40.  cmd_opts.opt_ind(), cmd_opts.opt_arg()) );  
  41.     }  
  42.     break;  
  43.  
  44.    case 'h':  
  45.    case 'H':  
  46.     {  
  47.      ACE_DEBUG( (LM_INFO, ACE_TEXT("Help: -hH[%d]: %s\n"),
  48.  cmd_opts.opt_ind(), cmd_opts.opt_arg()) );  
  49.     }  
  50.     break;  
  51.  
  52.    default:  
  53.     {  
  54.      ACE_DEBUG( (LM_INFO, ACE_TEXT("UnKnown option[%d]: %s\n"),
  55.  cmd_opts.opt_ind(), cmd_opts.opt_arg()) );  
  56.     }  
  57.   }  
  58.  }  
  59.  
  60.  return 0;  
  61. }  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ACE命令参数解析 的相关文章

随机推荐

  • 软件工程基础复习_7

    第7章软件测试 软件验证是通过检查和提供客观证据表明软件已经满足规定的需求 是确保软件质量和降低软件成本的重要手段 进行软件验证的方式有两种测试和证明 软件测试又可以分为两类 静态测试和动态测试 静态测试又称评审 是对软件进行的一种分析和检
  • 前端搜索JS库 Elasticlunr.js

    有Github账号的小伙伴们 帮忙点赞啦 Star 本人写了一个JS的离线搜索库 支持Field search 采用BM25模型进行Ranking Ranking的算法和Elasticsearch一样的 效果比lunr js有很高提升 希望
  • 期权分仓开户资金是否安全?具体保障措施有哪些?

    网上关于期权分仓系统的真假一直都没有定论 两方人的争论也让很多没有接触过期权分仓系统的人摸不着头脑 那么期权分仓靠谱吗 资金在里面安全吗 下文为大家科普期权分仓开户资金是否安全 具体保障措施有哪些 一 期权分仓开户资金的安全性是一个重要的问
  • 延时任务!redis key失效监听,rabbitmq死信队列实现,线程池,任务调度==>实现超时订单/默认好评/定时考试等

    实现超时订单 超期默认好评等等很多常见需要用到延时任务 大概用几种做法 redis key失效监听 rabbitmq死信队列 调度线程池 定时调度 一 redis key失效监听实现 推荐 注意redis conf 放开 notify ke
  • Python测试框架Pytest的基础入门

    Pytest简介 Pytest is a mature full featured Python testing tool that helps you write better programs The pytest framework
  • 【Ant Design】Form.Item创建自定义表单

    一 概述 Antd是一个非常强大的UI组件库 里面的Form表单组件也基本能满足我们大多数场景 但是也有需要自定义表单的场景 Vue2里我们使用v model 结合子组件的model属性 来实现自定义组件的双向绑定 Vue3里我们使用v m
  • 【Jboss】热部署

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net inforstack article details 47681803
  • 蓝桥杯:斐波那契数列最大公约数

    题目表示的很明确 要用两个算法 斐波那契数列是很经典的dp问题 最大公约数是很经典的辗转相除法 从而我理所应当的就定义一个数组存放斐波那契数列 long long int F 2021 0 F 1 1 F 2 1 for int i 3 i
  • 解决SQL Server占用服务器内存过高问题

    最近发现个问题 数据库服务器内存居高不下 64G的内存 几乎被占用100 结果差点把服务器给拖垮了 第一步 打开SQL Server Management Studio 在连接上右键 属性 第二步 内存选项卡 修改最大服务器内存的大小 如下
  • Android Killer的安装和配置 -安卓逆向的必备神器

    图文并茂 详细的不能再详细了 这你总不能学不会吧 都给我学会 安装包我已经放在了文章末尾 需要可以自取哟 1 下载安卓Android killer 首先 我们先下载打包好的Android killer 解压缩后可以得到一大堆没啥用的 文件
  • 用WinHex软件解析FAT32文件系统

    一 工欲善其事 1 准备工作 将一个U盘格式化为FAT32格式 在U盘内创建几个文件 最好是TXT文档 其中至少有一个是长文件 命名较长 2 补充知识 短文件名表示 长文件名表示 Note 当一个文件名为长文件名时 会由几个长文件名表示法和
  • Linux查看当前目录下各文件所占空间

    要查看当前目录下各文件所占空间 可以使用du命令 磁盘使用情况 配合sort命令来实现 以下是在Linux系统中执行的命令 du sh sort hr 解释一下这个命令 du sh 计算当前目录下每个文件和目录的总大小 并以易读的方式显示
  • 给定一个无重复元素的有序整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 n

    class Solution public List
  • 让dapper支持Oracle

    之前的项目数据使用mssql和mysql ORM使用一个轻量级的dapper 感觉很方便 性能也比EF强 关键是语法灵活 上手容易 用这种框架开发了几个网站 感觉非常好 但新项目要使用oracle 就出问题了 dapper里的关键字 在or
  • 史上最全量化交易资源整理

    有些国外的平台 社区 博客如果连接无法打开 那说明可能需要 科学 上网 国内在线量化平台 BigQuant 你的人工智能量化平台 可以无门槛地使用机器学习 人工智能开发量化策略 基于python 提供策略自动生成器 镭矿 基于量化回测平台
  • PCL 大窗口可视化两个点云

    一 主要参数 viewer gt setFullScreen true 设置点云为全屏显示的2D俯视图 二 代码实现 1 一个大窗口可视化两个点云 include
  • 清除history内容

    history记录是记录在 bash history中的 history c 清除的是当前会话的记录 原来的记录是不会被清除的 可以直接删除 bash history 清空这个文件cat dev null gt bash history
  • c++ - 抽象类 和 多态当中一些问题

    抽象类 纯虚函数 在虚函数的后面写上 0 则这个函数为纯虚函数 class A public virtual void func 0 纯虚函数不需要写函数的定义 他有类似声明一样的结构 抽象类概念 我们把具有纯虚函数的类 叫做抽象类 所谓抽
  • C++ 惯用法之 CRTP

    背景 CRTP 是 一种 C 的设计方法 其巧妙的结合了继承和模板编程技术 可以用来给类提供额外的功能 CRTP 概述 CRTP 的基本特征表现为 基类是一个模板类 派生类在继承该基类时 将派生类自身作为模板参数传递给基类 实现示例 tem
  • ACE命令参数解析

    ACE提供了ACE Get Opt类来处理命令行参数选项 这个类是一个迭代器 用于解析按照自然数方式计数的参数向量 它包装了POSIX的getotp 函数的功能 但是与getopt 函数不同 ACE Get Opt类的每个实例都维护有自己的