2012-04-23 44 views
0

我们有一个用c语言编写的应用程序和C++中的一些新模块。它在linux上运行。该应用程序已经投入使用。应用程序配置:需要您的意见

  1. 我们没有应用程序的通用配置。现在,我们计划为整个应用程序配置一个配置。所以,我们花了一些时间来设计我们自己的(尚未实现的)。

  2. 我们基本上认为保持XML(app_config.xml)文件中的配置,而在另一个XML文件中定义的策略对这个(app_config_policy.xml)的

  3. 写几个API的(EX:write_Config,read_config, verify_config,notify_config等)。这些apis的名称是不言自明的。如果需要,我可以提供更多信息。

  4. 策略XML文件定义特定的配置的制约,长度,类型等

现在的问题是:有可能是具有类似要求的应用。在进一步深入研究之前,我认为需要一些专家意见并继续他们的观点。

  1. 是否有任何开源库已经这样做?我知道libconfig是一个,但它很沉重,不是线程安全的(告诉我们)?

  2. 任何其他的替代品(开源),你们都提出了上述常见问题?

  3. 关于同样的任何其他想法或设计观点?

在此先感谢! Santhosh

回答

0

您应该使用模式来验证config xml文件。

0

去年,我提供了一个关于XML以外的配置语言的信息的赏金,它为配置文件的内容提供了模式验证。有几个令人沮丧的回应,你可以看到如果你遵循这个link

因此,如果您需要模式验证,那么我同意nfechner您应该查看XML的一些模式语言。您可以在onetwo维基百科文章中找到一些更有名的链接。

如果你还没有致力于使用XML,那么你可能想看看Config4*(其中我是维护者)。我提到这一点是因为Config4 *提供的模式验证语言至少比XML Schema更易于使用。 (该其他非XML配置语言我发现有模式验证是YAML,但该功能仅通过Java或Ruby API,这是不方便的C/C++应用程序是可用的。)

CONFIG4 *提供一个C++ API而不是一个C API,但是我怀疑你会发现将一个extern "C"包装放在API的一个有用的子集中很容易。

关于线程安全性...如果您的应用程序将在单线程初始化期间读取配置文件,并且之后只允许多个线程查询配置对象,那么我认为不需要任何同步,因为多个线程将调用只读操作。不过,我怀疑你已经知道了,并且你正在询问线程安全性,因为你期望有一些线程在配置对象上调用查询操作,而其他线程同时调用它上的更新操作。如果您可以举出您希望在您的应用程序中使用的一些多线程用例的示例,那么它可以帮助人们提供与您的线程安全要求相关的建议。作为一种回退技术,您可以围绕您使用的任何配置库的API实现同步的委托包装。例如(伪代码):

int config_lookup_int(const char * name) 
{ 
    int result; 

    get_mutex_lock(); 
    result = raw_api_lookup_int(name); 
    release_mutex_lock(); 
    return result; 
} 

最后一件事。请详细说明您正在寻找的notify_config功能。

相关问题