ACE处理命令行参数:ACE_Get_OPt
来源:互联网 发布:linux nfs是什么 编辑:程序博客网 时间:2024/05/19 11:44
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, constACE_TCHAR* optstring, int skip_args = 1, int report_errors = 0, intordering = PERMUTE_ARGS, int long_only = 0);
参数skip_args指定从命令行中的那个参数位置处开始迭代解析.默认为1,表示从元素argv[1]处开始迭代解析,通常argv[0]中存放的是程序名称;
例子:
- #include "ace/Get_Opt.h"
- #include "ace/Log_Msg.h"
- int ACE_TMAIN(int argc, ACE_TCHAR** argv)
- {
- const ACE_TCHAR options[] = "f:F:s:S:vVhHdD";
- int opt = 0;
- ACE_Get_Opt cmd_opts(argc, argv, options);
- cmd_opts.long_option(ACE_TEXT("config"), 'f', ACE_Get_Opt::ARG_REQUIRED);
- cmd_opts.long_option(ACE_TEXT("segment"), 's', ACE_Get_Opt::ARG_REQUIRED);
- cmd_opts.long_option(ACE_TEXT("CONFIG"), 'f', ACE_Get_Opt::ARG_REQUIRED);
- cmd_opts.long_option(ACE_TEXT("SEGMENT"), 's', ACE_Get_Opt::ARG_REQUIRED);
- while((opt = cmd_opts()) != EOF)
- {
- switch(opt)
- {
- case 'f':
- case 'F':
- {
- ACE_DEBUG( (LM_INFO, ACE_TEXT("File: -fF[%d]: %s/n"),
- cmd_opts.opt_ind(), cmd_opts.opt_arg()) );
- }
- break;
- case 's':
- case 'S':
- {
- ACE_DEBUG( (LM_INFO, ACE_TEXT("Segment: -sS[%d]: %s/n"),
- cmd_opts.opt_ind(), cmd_opts.opt_arg()) );
- }
- break;
- case 'v':
- case 'V':
- {
- ACE_DEBUG( (LM_INFO, ACE_TEXT("Version: -vV[%d]: %s/n"),
- cmd_opts.opt_ind(), cmd_opts.opt_arg()) );
- }
- break;
- case 'h':
- case 'H':
- {
- ACE_DEBUG( (LM_INFO, ACE_TEXT("Help: -hH[%d]: %s/n"),
- cmd_opts.opt_ind(), cmd_opts.opt_arg()) );
- }
- break;
- default:
- {
- ACE_DEBUG( (LM_INFO, ACE_TEXT("UnKnown option[%d]: %s/n"),
- cmd_opts.opt_ind(), cmd_opts.opt_arg()) );
- }
- }
- }
- return 0;
- }
- ACE处理命令行参数:ACE_Get_OPt
- ACE_Get_Opt解析命令行参数
- 解析命令行参数-ACE_Get_Opt类的用法
- ACE_Get_Opt解析命令行
- ACE_Get_Opt命令行选项
- 使用ACE_Get_Opt解析命令行
- ACE_Get_Opt参数解析类
- ACE命令行参数解析及配置文件读取
- 轻松处理命令行参数
- vc命令行参数处理
- getopt处理命令行参数
- HTK命令行参数处理
- python处理命令行参数
- F# 处理命令行参数
- python 处理命令行参数
- Linux命令行参数处理
- python处理命令行参数
- python处理命令行参数
- 抓紧时间
- Liver writer Test
- OGRE之CEGUI简介
- Select函数实现原理分析
- 使用SiteMesh装饰页面
- ACE处理命令行参数:ACE_Get_OPt
- Fedora 10 x86_64 QQ无法输入中文的解决方案
- hibernate ORM实现原理
- paypal 开发测试
- warning incompatible implicit declaration of built-in function 'printf'
- SEM经验谈:关键词大局观
- 上传后立即显示图片以及urldecode
- 搜集的几个C#教程网站(不断更新中...)
- sem专题网站