ACE命令行参数解析及配置文件读取.doc_第1页
ACE命令行参数解析及配置文件读取.doc_第2页
ACE命令行参数解析及配置文件读取.doc_第3页
ACE命令行参数解析及配置文件读取.doc_第4页
ACE命令行参数解析及配置文件读取.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ACE命令行参数解析及配置文件读取 文章分类:C+编程 通常我们开发后台服务程序时经常要提供命令行解析和搜集配置信息的功能。重复这样的劳动不仅耗时而且对操作系统平台也有依赖性,ACE框架提供了对命令行参数的解析及配置文件的解析的API接口使我们可以方面的对我们的程序进行方面的配置。 解析命令行参数-ACE_Get_Opt类的用法ARGV_Example.cpp此示例演示了ACE_Get_Optint类的基本用法,用来解析类似 program -c -g -a param 这样的程序参数源码解释Cpp代码 1. /* 2. *ARGV_Example.cpp,v1.32004/01/0313:04:35jwillemsenExp 3. * 4. *ACE_ARGVexamplesnotinalargerprogram.SamplecodefromTheACE 5. *ProgrammersGuide,Copyright2003Addison-Wesley.AllRightsReserved. 6. */7. 8. #includeace/os_include/os_netdb.h 9. #includeace/OS_NS_string.h 10. #includeace/Log_Msg.h 11. 12. /Listing1code/ch04 13. #includeace/ARGV.h 14. #includeace/Get_Opt.h 15. 16. /此示例演示了ACE_Get_Optint类的基本用法,用来解析类似program-c-g-aparam/这样的程序参数 17. ACE_TMAIN(intargc,ACE_TCHAR*argv) 18. 19. /(:f:h:)类似一个参数解析的模版字母紧跟着一个冒号:那就意味着该“参数开关”/后期望一个参数 20. /f:和h:说明参数列表必须是-fparm1-hparm2的形式 21. /options=ab:则说明参数列表应该是-a-bparm1类似的形式 22. staticconstACE_TCHARoptions=ACE_TEXT(:f:h:); 23. /ACE_Get_Opt会根据指定的参数和模版生产我们需要的参数列表 24. ACE_Get_Optcmd_opts(argc,argv,options); 25. 26. 27. /Listing1 28. 29. intoption; 30. ACE_TCHARconfig_fileMAXPATHLEN; 31. ACE_TCHARhostnameMAXHOSTNAMELEN; 32. ACE_OS_String:strcpy(config_file,ACE_TEXT(HAStatus.conf); 33. ACE_OS_String:strcpy(hostname,ACE_TEXT(notset); 34. /遍历参数列表并进行读取、解析 35. while(option=cmd_opts()!=EOF) 36. switch(option) 37. casef: 38. ACE_OS_String:strncpy(config_file, 39. cmd_opts.opt_arg(), 40. MAXPATHLEN); 41. break; 42. 43. caseh: 44. ACE_OS_String:strncpy(hostname, 45. cmd_opts.opt_arg(), 46. MAXHOSTNAMELEN); 47. break; 48. /:放在参数模版的最前面,如果根据模版指示如没有找到期待的参数 49. /重载的=操作符会返回:否则会返回? 50. case: 51. ACE_ERROR_RETURN 52. (LM_ERROR,ACE_TEXT(-%crequiresanargumentn), 53. cmd_opts.opt_opt(),-1); 54. 55. 56. default: 57. ACE_ERROR_RETURN 58. (LM_ERROR,ACE_TEXT(Parseerror.n),-1); 59. 60. 61. ACE_DEBUG(LM_DEBUG,ACE_TEXT(Configfile:%sn),config_file); 62. ACE_DEBUG(LM_DEBUG,ACE_TEXT(Hostname:%sn),hostname); 63. return0; 64. /* * 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 * Programmers 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_fileMAXPATHLEN; ACE_TCHAR hostnameMAXHOSTNAMELEN; 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 argumentn), 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: %sn), config_file); ACE_DEBUG (LM_DEBUG, ACE_TEXT (Hostname: %sn), hostname); return 0;执行结果演示 /正常的参数解析D:projectACE_wrappersexamplesAPGConfigARGV_Example -f my.conf -h chengkaiConfig file: my.confHostname: chengkai/确实一个必要的参数D:projectACE_wrappersexamplesAPGConfigARGV_Example -f my.conf -h-h requires an argument/指定了一个无效的参数D:projectACE_wrappersexamplesAPGConfigARGV_Example -f my.conf -aParse error.Get_Opt_Long.cpp此示例演示长参数开关的使用,你可以用program -config my.conf 或用program -config my.conf这样形式的用法和 program -f my.conf是等价的。源码解释 Cpp代码 1. /* 2. *Get_Opt_Long.cpp,v1.22004/01/0313:04:35jwillemsenExp 3. * 4. *ACE_Get_Optlong_onlyexamples.SamplecodefromTheACE 5. *ProgrammersGuide,Copyright2003Addison-Wesley.AllRightsReserved. 6. */7. 8. #includeace/OS_NS_string.h 9. #includeace/Get_Opt.h 10. #includeace/Log_Msg.h 11. 12. /此示例演示长参数开关的使用,你可以用program-configmy.conf/或用program-configmy.conf 13. /这样形式的用法和program-fmy.conf是等价的 14. int15. ACE_TMAIN(intargc,ACE_TCHAR*argv) 16. 17. 18. staticconstACE_TCHARoptions=ACE_TEXT(:f:); 19. ACE_Get_Optcmd_opts 20. (argc,argv,options,1,0,ACE_Get_Opt:PERMUTE_ARGS,1); 21. /指定短选项开关对应的长选项开关 22. if(cmd_opts.long_option 23. (ACE_TEXT(config),f,ACE_Get_Opt:ARG_REQUIRED)=-1) 24. return-1; 25. 26. intoption; 27. ACE_TCHARconfig_fileMAXPATHLEN; 28. ACE_OS_String:strcpy(config_file,ACE_TEXT(HAStatus.conf); 29. while(option=cmd_opts()!=EOF) 30. switch(option) 31. casef: 32. ACE_OS_String:strncpy(config_file, 33. cmd_opts.opt_arg(), 34. MAXPATHLEN); 35. break; 36. 37. case: 38. ACE_ERROR_RETURN 39. (LM_ERROR,ACE_TEXT(-%crequiresanargumentn), 40. cmd_opts.opt_opt(),-1); 41. 42. 43. default: 44. ACE_ERROR_RETURN 45. (LM_ERROR,ACE_TEXT(Parseerror.n),-1); 46. 47. 48. ACE_DEBUG(LM_DEBUG,ACE_TEXT(Configfileis%sn),config_file); 49. 50. return0; 51. /* * Get_Opt_Long.cpp,v 1.2 2004/01/03 13:04:35 jwillemsen Exp * * ACE_Get_Opt long_only examples. Sample code from The ACE * Programmers Guide, Copyright 2003 Addison-Wesley. All Rights Reserved. */ #include ace/OS_NS_string.h#include ace/Get_Opt.h#include ace/Log_Msg.h /此示例演示长参数开关的使用,你可以用program -config my.conf/或用program -config my.conf/这样形式的用法和 program -f my.conf是等价的intACE_TMAIN (int argc, ACE_TCHAR *argv) static const ACE_TCHAR options = ACE_TEXT (:f:); ACE_Get_Opt cmd_opts (argc, argv, options, 1, 0, ACE_Get_Opt:PERMUTE_ARGS, 1); /指定短选项开关对应的长选项开关 if (cmd_opts.long_option (ACE_TEXT (config), f, ACE_Get_Opt:ARG_REQUIRED) = -1) return -1; int option; ACE_TCHAR config_fileMAXPATHLEN; ACE_OS_String:strcpy (config_file, ACE_TEXT (HAStatus.conf); while (option = cmd_opts () != EOF) switch (option) case f: ACE_OS_String:strncpy (config_file, cmd_opts.opt_arg (), MAXPATHLEN); break; case : ACE_ERROR_RETURN (LM_ERROR, ACE_TEXT (-%c requires an argumentn), 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 is %sn), config_file); return 0;执行结果演示 D:projectACE_wrappersexamplesAPGConfigGet_Opt_Long -f my.confConfig file is my.confD:projectACE_wrappersexamplesAPGConfigGet_Opt_Long -config my.confConfig file is my.confD:projectACE_wrappersexamplesAPGConfigGet_Opt_Long -config my.confConfig file is my.confGet_Opt.cpp此示例展示了在使用长选项并且没有指定与之对应的短选项的时候,ACE_Get_Opt可以通过指定一个整数返回值与长选项匹配Cpp代码 1. /* 2. *Get_Opt.cpp,v1.22004/01/0313:04:35jwillemsenExp 3. * 4. *ACE_Get_Optexamplesnotinalargerprogram.SamplecodefromTheACE 5. *ProgrammersGuide,Copyright2003Addison-Wesley.AllRightsReserved. 6. */7. 8. #includeace/OS_NS_string.h 9. #includeace/Get_Opt.h 10. #includeace/Log_Msg.h 11. 12. /此示例展示了在使用长选项并且没有指定与之对应的短选项的时候,可以通过指定一个/整数返回值与长选项匹配 13. int14. ACE_TMAIN(intargc,ACE_TCHAR*argv) 15. 16. 17. /Exampleforalongoptionwithoutacorrespondingshortoption. 18. /Justputsomecontextheresothefollowingcompilesandruns. 19. staticconstACE_TCHARoptions=ACE_TEXT(:f:); 20. ACE_Get_Optcmd_opts(argc,argv,options); 21. 22. /指定长选项-cool_option并且其缺省返回值0 23. cmd_opts.long_option(ACE_TEXT(cool_option); 24. cmd_opts.long_option(ACE_TEXT(the_answer),42); 25. /Listing1 26. 27. intoption; 28. ACE_TCHARconfig_fileMAXPATHLEN; 29. ACE_OS_String:strcpy(config_file,ACE_TEXT(HAStatus.conf); 30. while(option=cmd_opts()!=EOF) 31. switch(option) 32. casef: 33. ACE_OS_String:strncpy(config_file, 34. cmd_opts.opt_arg(), 35. MAXPATHLEN); 36. break; 37. 38. /Listing2code/ch04 39. case0: 40. ACE_DEBUG(LM_DEBUG,ACE_TEXT(Yes,verycool.n); 41. break; 42. 43. case42: 44. ACE_DEBUG(LM_DEBUG,ACE_TEXT(the_answeris42n); 45. break; 46. /Listing2 47. 48. case: 49. ACE_ERROR_RETURN 50. (LM_ERROR,ACE_TEXT(-%crequiresanargumentn), 51. cmd_opts.opt_opt(),-1); 52. 53. 54. default: 55. ACE_ERROR_RETURN 56. (LM_ERROR,ACE_TEXT(Parseerror.n),-1); 57. 58. 59. return0; 60. /* * Get_Opt.cpp,v 1.2 2004/01/03 13:04:35 jwillemsen Exp * * ACE_Get_Opt examples not in a larger program. Sample code from The ACE * Programmers Guide, Copyright 2003 Addison-Wesley. All Rights Reserved. */ #include ace/OS_NS_string.h#include ace/Get_Opt.h#include ace/Log_Msg.h /此示例展示了在使用长选项并且没有指定与之对应的短选项的时候,可以通过指定一个/ 整数返回值与长选项匹配intACE_TMAIN (int argc, ACE_TCHAR *argv) / Example for a long option without a corresponding short option. / Just put some context here so the following compiles and runs. static const ACE_TCHAR options = ACE_TEXT (:f:); ACE_Get_Opt cmd_opts (argc, argv, options); / 指定长选项-cool_option 并且其缺省返回值0 cmd_opts.long_option (ACE_TEXT (cool_option); cmd_opts.long_option (ACE_TEXT (the_answer), 42); / Listing 1 int option; ACE_TCHAR config_fileMAXPATHLEN; ACE_OS_String:strcpy (config_file, ACE_TEXT (HAStatus.conf); while (option = cmd_opts () != EOF) switch (option) case f: ACE_OS_String:strncpy (config_file, cmd_opts.opt_arg (), MAXPATHLEN); break; / Listing 2 code/ch04 case 0: ACE_DEBUG (LM_DEBUG, ACE_TEXT (Yes, very cool.n); break; case 42: ACE_DEBUG (LM_DEBUG, ACE_TEXT (the_answer is 42n); break; / Listing 2 case : ACE_ERROR_RETURN (LM_ERROR, ACE_TEXT (-%c requires an argumentn), cmd_opts.opt_opt (), -1); default: ACE_ERROR_RETURN (LM_ERROR, ACE_TEXT (Parse error.n), -1); return 0;执行结果演示 Get_Opt -cool_option -the_answerYes, very cool.the_answer is 42读写配置文件-ACE_Configuration_Heap类的用法HA_Status.cpp此示例演示了ACE对配置文件的读取的功能,ACE可以方便的从配置文件读取字符串类型、整数类型、二进制信息/*Cpp代码 1. *HA_Status.cpp,v1.42005/06/2916:35:46shustonExp 2. * 3. *HomeAutomationStatusserver.SamplecodefromTheACEProgrammersGuide, 4. *Copyright2003Addison-Wesley.AllRightsReserved. 5. */ 6. 7. #includeace/OS_NS_string.h 8. #includeace/Configuration.h 9. #includeace/Configuration_Import_Export.h 10. #includeace/Get_Opt.h 11. #includeace/Log_Msg.h 12. #includeace/INET_Addr.h 13. #includeace/Service_Object.h 14. 15. classHA_Status:publicACE_Service_Object 16. 17. public: 18. virtualintinit(intargc,ACE_TCHAR*argv); 19. 20. private: 21. ACE_INET_Addrlisten_addr_; 22. ; 23. 24. 25. int26. HA_Status:init(intargc,ACE_TCHAR*argv) 27. 28. 29. /DoACE_Get_Optandgetconffilename,readoutthesections 30. /andprintthenames. 31. 32. /Listing1code/ch04 33. staticconstACE_TCHARoptions=ACE_TEXT(:f:); 34. ACE_Get_Optcmd_opts(argc,argv,options); 35. if(cmd_opts.long_option 36. (ACE_TEXT(config),f,ACE_Get_Opt:ARG_REQUIRED)=-1) 37. return-1; 38. intoption; 39. ACE_TCHARconfig_fileMAXPATHLEN; 40. ACE_OS:strcpy(config_file,ACE_TEXT(HAStatus.conf); 41. while(option=cmd_opts()!=EOF) 42. switch(option) 43. casef: 44. ACE_OS:strncpy(config_file, 45. cmd_opts.opt_arg(), 46. MAXPATHLEN); 47. break; 48. case: 49. ACE_ERROR_RETURN 50. (LM_ERROR,ACE_TEXT(-%crequiresanargumentn), 51. cmd_opts.opt_opt(),-1); 52. default: 53. ACE_ERROR_RETURN 54. (LM_ERROR,ACE_TEXT(Parseerror.n),-1); 55. 56. /Listing1 57. 58. /Listing2code/ch04 59. ACE_Configuration_Heapconfig; 60. if(config.open()=-1) 61. ACE_ERROR_RETURN 62. (LM_ERROR,ACE_TEXT(%pn),ACE_TEXT(config),-1); 63. ACE_Registry_ImpExpconfig_importer(config); 64. if(config_importer.import_config(config_file)=-1) 65. ACE_ERROR_RETURN 66. (LM_ERROR,ACE_TEXT(%pn),config_file),-1); 67. 68. ACE_Configuration_Section_Keystatus_section; 69. /指定打开HAStatus节进行读取 70. if(config.open_section(config.root_section(), 71. ACE_TEXT(HAStatus), 72. 0, 73. status_section)=-1) 74. ACE_ERROR_RETURN(LM_ERROR,ACE_TEXT(%pn), 75. ACE_TEXT(CantopenHAStatussection), 76. -1); 77. 78. /分别用来保存读取的字符串类型的地址和整形的端口号 79. u_intstatus_port; 80. ACE_TStringserver_ip; 81. /读取取字符串类型的地址属性 82. if(config.get_string_value(status_section,ACE_TEXT(ServerIP),server_ip)=-1) 83. ACE_ERROR_RETURN 84. (LM_ERROR, 85. ACE_TEXT(HAStatusServerIPdoesnotexistn), 86. -1); 87. /读取整形的端口属性 88. if(config.get_integer_value(status_section, 89. ACE_TEXT(ListenPort), 90. status_port)=-1) 91. ACE_ERROR_RETURN 92. (LM_ERROR, 93. ACE_TEXT(HAStatusListenPortdoesnotexistn), 94. -1); 95. /this-listen_addr_.set(static_cast(status_port); 96. /Listing2 97. ACE_DEBUG(LM_DEBUG,ACE_TEXT(ServerIP=%sn),server_ip.c_str(); 98. ACE_DEBUG(LM_DEBUG,ACE_TEXT(ListenPort=%d),status_port); 99. 100. 101. return0; 102. 103. 104. int105. ACE_TMAIN(intargc,ACE_TCHAR*argv) 106. 107. HA_Statusstatus; 108. status.init(argc,argv); 109. return0; 110. * HA_Status.cpp,v 1.4 2005/06/29 16:35:46 shuston Exp * * Home Automation Status server. Sample code from The ACE Programmers Guide, * Copyright 2003 Addison-Wesley. All Rights Reserved. */ #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_Objectpublic: virtual int init (int argc, ACE_TCHAR *argv); private: ACE_INET_Addr listen_addr_; intHA_Status:init (int argc, ACE_TCHAR *argv) / Do ACE_Get_Opt and get conf file name, read out the sections / and print the names. / Listing 1 code/ch04 static const ACE_TCHAR options = ACE_TEXT (:f:); ACE_Get_Opt cmd_opts (argc, argv, options); if (cmd_opts.long_option (ACE_TEXT (config), f, ACE_Get_Opt:ARG_REQU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论