ACE_Configuration_Heap类

 

该类用语访问合操纵配置信息,它们的接口由ACE_Configuration类来定义的;

1、ACE_Configuration_Heap:它可以用在几乎所有的平台上,在内存中保存所有配置信息.可以对内存的分配进行定制,使用持久的后备存储,但是最常用的是动态分配的堆内存,所以这个类的名字里面含有一个Heap;

2、ACE_Configuration_Win32Registry:它只能用在Windows平台上,它实现了ACE_Configuration类的接口,可以访问合操纵注册表中的数据;

3、ACE_Registry_ImpExp:这个类使用了一种文本格式,其中的每个值都有类型信息.

4、ACE_Ini_ImpExp:这个类使用的是较老的Windows"INI"文件的格式,其中的值没有相关联的类型信息,因此,不管原来的类型是什么,使用ACE_Ini_ImpExp导出的配置数据总是作为字符串数据导入;

下面的例子是ACE_Configuration_Heap类的使用样例,用于从配置文件中读取配置信息;配置文件的格式如下:

[SECTION]

"Key1"="Value1"

"Key2"="Value2"

"Key2"="Value2"

例子代码:
#include "ace/Get_Opt.h"
#include "ace/Log_Msg.h"
#include "ace/SString.h"
#include "ace/OS_String.h"
#include "ace/Configuration.h"
#include "ace/Configuration_Import_Export.h"

int ACE_TMAIN(int argc, ACE_TCHAR** argv)
{
 int opt = 0;
 ACE_TCHAR strCfgFile[128] = "";
 ACE_TCHAR strSegName[128] = "";

 ACE_TCHAR options[] = "f:F:s:S:vV";
 ACE_Get_Opt cmd_opts(argc, argv, options);

 //set long 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_OS_String::strcpy(strCfgFile, cmd_opts.opt_arg());
    }
    break;

   case 's':
   case 'S':
    {
     ACE_OS_String::strcpy(strSegName, cmd_opts.opt_arg());
    }
    break;

   case 'v':
   case 'V':
    {
     ACE_DEBUG((LM_INFO, ACE_TEXT("test the configuration with ace\n")));
    }
    break;
  }
 }

 ACE_DEBUG( (LM_INFO, ACE_TEXT("You entered ---> CfgFileName: %s;  SegName: %s\n"), strCfgFile, strSegName) );

 //declare a configuration object
 ACE_Configuration_Heap config;

 if(config.open() == -1)
 {
  ACE_ERROR_RETURN( (LM_ERROR, ACE_TEXT("--->failed to open the configuration object[%p]"), ACE_TEXT("open_config")), -1);
 }

 //declare a importer of config, and import the configuration-file
 ACE_Registry_ImpExp config_importer(config);
 if(config_importer.import_config(ACE_TEXT(strCfgFile)) == -1)
 {
  ACE_ERROR_RETURN( (LM_ERROR, ACE_TEXT("--->failed to import config-file %s[%p]\n"), strCfgFile, ACE_TEXT("import_config()")), -2);
 }

 //declare a section-key pair, and open this section with the config-object;
 ACE_Configuration_Section_Key status_section;
 if(config.open_section(config.root_section(), ACE_TEXT(strSegName), 0, status_section) == -1)
 {
  ACE_ERROR_RETURN( (LM_ERROR, ACE_TEXT("--->failed to open section %s[%p]\n"), strSegName, ACE_TEXT("open_section(LOG_IMPORT)")), -3 );
 }

 //get port
 ACE_TString port = "";
 if(config.get_string_value(status_section, ACE_TEXT("Port"), port) == -1)
 {
  ACE_ERROR_RETURN( (LM_ERROR, ACE_TEXT("--->failed to get HOST PORT[%p]\n"), ACE_TEXT("get_string_value(Port)")), -4 );
 }

 //get host ip
 ACE_TString strHostIP = "";
 if(config.get_string_value(status_section, ACE_TEXT("HostIP"), strHostIP) == -1)
 {
  ACE_ERROR_RETURN( (LM_ERROR, ACE_TEXT("--->failed to get HOST IP[%p]\n"), ACE_TEXT("get_string_value()")), -5 );
 }

 ACE_DEBUG( (LM_INFO, ACE_TEXT("IP: %s\nPort: %d\n"), strHostIP.c_str(), ACE_OS::atoi(port.c_str())) );
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值