ACE_Get_Optint

源文:http://ckasj.vicp.net/dokuwiki/doku.php/ace:config
此示例演示了ACE_Get_Optint类的基本用法,用来解析类似 program -c -g -a param 这样的程序参数

源码解释

/**
 * ARGV_Example.cpp,v 1.3 2004/01/03 13:04:35 jwillemsen Exp
 *
 * ACE_ARGV examples not in a larger program. Sample code from The ACE
 * Programmer's Guide, Copyright 2003 Addison-Wesley. All Rights Reserved.
 */
 
#include "ace/os_include/os_netdb.h"
#include "ace/OS_NS_string.h"
#include "ace/Log_Msg.h"
 
// Listing 1 code/ch04
#include "ace/ARGV.h"
#include "ace/Get_Opt.h"
 
//此示例演示了ACE_Get_Optint类的基本用法,用来解析类似 program -c -g -a param 这样的程序参数
 ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
    //'(":f:h:")'类似一个参数解析的模版 字母紧跟着一个冒号':'那就意味着该“参数开关”后期望一个参数
    //"f:" 和"h:"说明参数列表必须是 -f parm1 -h parm2的形式
    //options[] = "ab:" 则说明参数列表应该是 -a -b parm1类似的形式 
    static const ACE_TCHAR options[] = ACE_TEXT (":f:h:");
   //ACE_Get_Opt会根据指定的参数和模版生产我们需要的参数列表
   ACE_Get_Opt cmd_opts (argc, argv, options);
 
 
// Listing 1
 
  int option;
  ACE_TCHAR config_file[MAXPATHLEN];
  ACE_TCHAR hostname[MAXHOSTNAMELEN];
  ACE_OS_String::strcpy (config_file, ACE_TEXT ("HAStatus.conf"));
  ACE_OS_String::strcpy (hostname, ACE_TEXT ("not set"));
  //遍历参数列表并进行读取、解析
  while ((option = cmd_opts ()) != EOF)
    switch (option) {
    case 'f':
      ACE_OS_String::strncpy (config_file,
                              cmd_opts.opt_arg (),
                              MAXPATHLEN);
      break;
 
    case 'h':
      ACE_OS_String::strncpy (hostname,
                              cmd_opts.opt_arg (),
                              MAXHOSTNAMELEN);
      break;
     //':'放在"参数模版"的最前面,如果根据模版指示如没有找到期待的参数
     //重载的'='操作符会返回':'否则会返回'?'
     case ':':
      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);
    }
 
  ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Config file: %s/n"), config_file));
  ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Hostname: %s/n"), hostname));
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值