ACE_Get_Opt函数笔记
#include "ace/OS_NS_string.h"
#include "ace/Configuration.h"
#include "ace/Configuration_Import_Export.h"
#include "ace/Get_Opt.h"
#include "ace/Log_Msg.h"
#include "ace/INET_Addr.h"
#include "ace/Service_Object.h" class HA_Status: public ACE_Service_Object
{
public:
virtual int init(int argc, ACE_TCHAR *argv[]); private:
ACE_INET_Addr listen_addr_;
}; int HA_Status::init(int argc, ACE_TCHAR *argv[])
{
// Listing 1 code/ch04 // define the valid options, A colon following an option letter means
// the options requires an arguemnt. Use a double colon if the argument
// is optional. examp: "a:b:cd::e" has "-a ,-b , -c ,-d, -e".
static const ACE_TCHAR options[] = ACE_TEXT(":f:");
ACE_Get_Opt cmd_opts(argc, argv, options); // use the long_option()method to equate a long option string
// with one of the short options;
if (cmd_opts.long_option(ACE_TEXT("config"),'f', ACE_Get_Opt::ARG_REQUIRED) == -1)
return -1; int option;
ACE_TCHAR config_file[MAXPATHLEN];
ACE_OS::strcpy(config_file, ACE_TEXT("HAStatus.conf")); // Use operator() (or the get_opt() method) to iterate through the
// command line options.It returns the short option character when
// located, and the short option equivalent when a long option is processed.
// operator() returns EOF when all the options have been processed.
while((option = cmd_opts()) != EOF)
switch (option) {
case 'f':
// The option's argument is accessed via the opt_arg() method.
ACE_OS::strncpy(config_file,
cmd_opts.opt_arg(),
MAXPATHLEN);
break;
case ':':
//If it is a ':',get_opt() return a ':' when a required argument is missing.
ACE_ERROR_RETURN((LM_ERROR,
ACE_TEXT("-%c requires an argument\n"),
cmd_opts.opt_opt()), -1);
default:
ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("Parse error.\n")), -1); }
// Listint 1 // Listint 2 code/ch04
ACE_Configuration_Heap config;
if (config.open() == -1)
ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT("config")), -1); ACE_Registry_ImpExp config_importer(config);
if (config_importer.import_config(config_file) == -1)
ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("%p\n"), config_file), -1); ACE_Configuration_Section_Key status_section;
if (config.open_section(config.root_section(),
ACE_TEXT("HAStatus"),
0,
status_section) == -1)
ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("%p\n"),
ACE_TEXT("Can't open HAStatus sections")),
-1); u_int status_port;
if (config.get_integer_value(status_section,
ACE_TEXT("ListenPort"),
status_port) == -1)
ACE_ERROR_RETURN((LM_ERROR, "HAStatus ListenPort does not exist\n"), -1); this->listen_addr_.set(static_cast<u_short> (status_port)); return 0; } int ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
HA_Status status;
status.init(argc, argv);
return 0;
} /* ACE_Get_Opt (int argc,
ACE_TCHAR **argv,
const ACE_TCHAR *optstring,
int skip_args = 1,
int report_error = 0,
int ordering = PERMUTE_ARGS,
int long_only = 0); # 1.start parsing at an arbitrary index
ACE_Get_Opt can be directed to start processing the argument vector at an
arbi- trary point specified by the skip_args parameter.
The default value is 1, which causes ACE_Get_Opt to skip argv[0]
(traditionally, the program name) when parsing a command line passed to
main(). When using ACE_Get_Opt to parse options received when initializing
a dynamic service skip_args is often specified as 0, because arguments
passed to services initialized via the ACE Service Configurator framework
start in argv[0]. # 2.Report errors while parsing
By default, ACE_Get_Opt is silent about parsing errors; it simply returns
the appropriate value from operator() (or the get_opt() method), allowing
your application to handle and report errors in the most sensible way. If,
however, you’d rather have ACE_Get_Opt display an error message when it
detects an error in the specified argument vector, the constructor’s
report_errors argu- ment should be non-zero. In this case, ACE_Get_Opt will
use ACE_ERROR with the LM_ERROR severity to report the error. # 3.Alternate long option specification
If "W" is included in the options definitions string, ACE_Get_Opt treats -W
similarly to --. For example, -W foo will be parsed the same as --foo. This
can be useful when manipulating argument vectors to change parameters into
long options by inserting an element with -W instead of inserting -- on an
existing element. # 4.About argument ordering
Some applications require you to specify all options at the beginning of
the command line, while others allow you to mix options and other non-option
tokens (such as file names). ACE_Get_Opt supports selection of use cases
defined by enumerators defined in ACE_Get_Opt. ## 1.ACE_Get_Opt::PERMUTE_ARGS: As the argument vector is parsed, the elements
are dynamically rearranged so that those with valid options(and their arguments)
appear at the front of the argument vector, in their original relative ordering.
Non-option elements are placed after the option elements. They can be processed
by some other part of your system, or processed as known non-options. When
operator() returns EOF to indicate the end of options, opt_ind() returns the
index to the first non-option element in the argumet vector. ## 2.ACE_Get_Opt::REQUIRED_ORDER: The argument vector is not reordered and all
options and their their arguments must be at the front of the argument vector.
If a non-option element is encountered, operator() returns EOF; opt_ind()
returns the index of the non-option element. (What is the non-option element?) ## 3.ACE_Get_Opt::RETURN_IN_ORDER: The argument vector is not reordered. Any
non-option element causes operator() to return 1 and the actual element is accessible
via the opt_arg() method. This mode is useful for situations in which options
and other arguments can be specified in any order and in which the relative
ordering makes a difference. This is a situation where it may be useful to parse
options, examine non-options, and and continue parsing after the non-options using
the skip_args argument to specify the new starting point. ## The other two method to change the argument order
1. If the POSIXLY_CORRECT environment variable is set, the ordering mode is set
to REQUIRE_ORDER
2. A + or - character at the beginning of the options string. + changes the
ordering mode to REQUIRE_ORDER; - changes it to RETURN_IN_ORDER. If both are at
the start of the options string, the last ont is used. # 5.Long optins only
If the long_only parameter to the ACE_Get_Opt constructor is non-zero, command
line tokens that begin with a single - are checked as long options. For example,
if the long_only argument were set to 1, the user could type either --config
or -config. */ /*
# ACE_Configuration is a class that defines the configuration interface for the
following two classes available for accessing and manipulating configuration
information:
## 1. ACE_Configuration_Heap is available on all platforms. It keeps all information
in memory. The memory allocation can be customized to use a persistent backing
store, but the most common use is with dynamically-allocated heap memory. ## 2. ACE_Configuration_Win32Registry is available only on Windows. It implements
the ACE_Configuration interface to access and manipulate information in the
Windows registry. # Configuration data is organized hierarchically in sections, analogous to a
filesystem directory tree. Each configuration object contains a root section
that has no name, similar to the filesystem root in UNIX.All other sections
are created hierar- chically beneath the root section and are named by the
application. Sections can be nested to an arbitrary depth. # Configuration Backing Stores
## 1. ACE_Registry_ImpExp uses a text format that includes type information with
each value. This allows type information to be preserved across export/import,
even on machines with different byte orders. ## 2. ACE_Ini_ImpExp uses the older Windows "INI" file format which does not
have type information associated with the values. Therefore, configuration data
exported using ACE_Ini_ImpExp is always imported as string data, regardless of
the original type. */
ACE_Get_Opt函数笔记的更多相关文章
- MySQL函数笔记
MySQL函数笔记 日期函数 SELECT t1.xcjyrq, t1.* FROM view_sbxx t1 WHERE t1.syzt ; SELECT t1.xcjyrq, t1.* FROM ...
- JavaScript基础——JavaScript函数(笔记)
avaScript 函数(笔记) JavaScript 是函数式编程语言,在JavaScript脚本中可以随处看到函数,函数构成了JavaScript源代码的主体. 一.定义函数 定义函数的方法有两种 ...
- STL之vector常用函数笔记
STL之vector常用函数笔记 学会一些常用的vector就足够去刷acm的题了 ps:for(auto x:b) cout<<x<<" ";是基于范围的 ...
- numpy函数笔记(持续更新)
numpy函数笔记 np.isin用法 np.isin(a,b) 用于判定a中的元素在b中是否出现过,如果出现过返回True,否则返回False,最终结果为一个形状和a一模一样的数组.(注意:这里的a ...
- Javascript进阶篇——(函数)笔记整理
这节是根据慕课网和JavaScript DOM编程艺术一书加起来做的笔记 什么是函数如果需要多次使用同一段代码,可以把它们封装成一个函数.函数(function)就是一组允许在你的代码里随时调用的语句 ...
- 学习Python函数笔记之二
---恢复内容开始--- 1.内置函数:取绝对值函数abs() 2.内置函数:取最大值max(),取最小值min() 3.内置函数:len()是获取序列的长度 4.内置函数:divmod(x,y),返 ...
- 学习python函数笔记之一
1.函数文档字符串,用于存放函数的说明,一般写在第一行 2.函数调用:函数名+参数列表(函数的参数分实际参数和形式参数,str就是形式参数,则'welcome 头 python'就是实际参数) 参数需 ...
- Oracle常用函数笔记
一.字符函数 1.dual 临时表 oracle中的临时变量表,此表只返回第一行第一列 例如:select sysdate from dual 输出:2014-6-9 11:20:39 2.Initc ...
- C++ 内联函数笔记
要使用内联函数,必须采取下述措施之一: +在函数声明前加上关键字inline: +在函数定义前加上关键字inline. 通常的做法是省略原型,将整个定义(即函数头和所有函数代码)放在本应提供原型的地方 ...
随机推荐
- [Emlog主题] Monkey V3.0 优化修改
原作者博客:https://blog.dyboy.cn/ Monkey V3.0 优化修改版 修改说明: 背景颜色修改(按个人喜好可自行修改,仿PCQQ午夜巴黎皮肤) 搜索框按钮样式优化,不那么突兀了 ...
- iOS 的文件操作
直接上操作 效果:将一张图片写入文件 (图片本身已经在Assets.xcassets里面了) 1.获取当前app的沙盒路径 NSString *documentPath = NSSearchPathF ...
- Linux_spool命令
spool的作用是什么? spool的作用可以用一句话来描述:在sqlplus中用来保存或打印查询结果. 参数指南 对于SPOOL数据的SQL,最好要自己定义格式,以方便程序直接导入,SQL语句如: ...
- angular关于select的留白问题
Angular select留白的问题 小白的总结,大神勿喷:需要转载请说明出处,如果有什么问题,欢迎留言 总结:出现留白说明你的ng-model的值在option的value中没有对应的值: 一.直 ...
- 初步接触Linux命令
目录 虚拟机快照 1.首先将已经运行的系统关机 2.找到快照 拍摄快照 3.找到克隆 下一步 有几个快照会显示几个 4.克隆完成后 要修改一下IP 不然无法同时运行两个虚拟机系统 系统介绍 1.pin ...
- python爬取实习僧招聘信息字体反爬
参考博客:http://www.cnblogs.com/eastonliu/p/9925652.html 实习僧招聘的网站采用了字体反爬,在页面上显示正常,查看源码关键信息乱码,如下图所示: 查看网页 ...
- Linux Ubuntu18.04 安装配置 clash
我最近一段时间在搭建用于构建 Docker 镜像的开发测试环境,这个环境是一台运行于 Windows 笔记本上的虚拟机,其操作系统为 Ubuntu 18.04 .构建场景中经常要去 Github 获取 ...
- [BUUCTF]REVERSE——[WUSTCTF2020]level3
[WUSTCTF2020]level3 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,找到关键函数 看样子是个base64加密,但又感觉没那么简单,再翻翻左边的函数,找到了base64加 ...
- oracle11gR2、client及plsql完整安装与配置
本文主要介绍Oracle11g,client及PLSQL的安装过程 一,oracle安装 安装环境:虚拟机win7 64 1.点击目录中 setup.exe文件 2.配置安全更新中,取消通过my or ...
- 40张图+万字,从9个数据类型帮你稳稳的拿捏Redis数据结构
摘要:本文把Redis新旧版本的数据结构说图解一遍,共有 9 种数据结构:SDS.双向链表.压缩列表.哈希表.跳表.整数集合.quicklist.listpack. 本文分享自华为云社区<为了拿 ...