2012-04-23 48 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功能。

相關問題