源文: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; }