libconfig++(是乙個用於處理結構化配置檔案的簡單庫。libconfig++的配置的檔案格式非常簡潔,可讀性也非常的好,而且是type-aware,普通的配置檔案讀取後訪問的型別為字串,libconfig++可以「識別」整形的配置。libconfig++的配置形式也非常的靈活。此外,libconfig++還可以修改配置檔案。
安裝
安裝包:libconfig-1.5.tar.gz
安裝過程:解壓,配置,編譯,安裝
//解壓安裝包
tar -zxvf libconfig-1.5.tar.gz
//安裝前的引導配置,預設安裝到/usr/local,可以通過./configure --prefix=prefix進行修改,也可以修改指令碼引數ac_default_prefix的值
cd libconfig-1.5; ./configure
//編譯原始碼
make
//安裝前的檢查
make check
//安裝
make install
使用說明
所需標頭檔案libconfig.h++,編譯時需要鏈結動態庫libconfig++
class libconfigxx_api config
bool exists(const
char *path) const; //判斷是否存在某項配置名
inline bool exists(const std::string &path) const
//查詢指定節點的值
bool lookupvalue(const
char *path, bool &value) const;
bool lookupvalue(const
char *path, int &value) const;
bool lookupvalue(const
char *path, unsigned int &value) const;
...setting & getroot() const;//獲取配置的根節點
...private:
...config_t *_config;
setting::format _defaultformat;
//禁止拷貝和賦值
config(const config& other); // not supported
config& operator=(const config& other); // not supported
};
//獲取/修改配置
class libconfigxx_api setting
setting & lookup(const
char *path) const;
inline setting & lookup(const
std::string &path) const
setting & operator(const
char *name) const;
setting & operator(int index) const;
//從readfile的結果中查詢path的值,並將其賦給指定的型別vlaue
bool lookupvalue(const
char *name, bool &value) const;
bool lookupvalue(const
char *name, int &value) const;
bool lookupvalue(const
char *name, unsigned
int &value) const;
bool lookupvalue(const
char *name, long
long &value) const;
bool lookupvalue(const
char *name, unsigned
long
long &value) const;
...//用於新增指定型別的節點
setting & add(const
char *name, type type);
inline setting & add(const
std::string &name, type type)
setting & add(type type);
bool exists(const
char *name) const;
//判斷某項配置是否存在
inline
bool exists(const
std::string &name) const
...private:
config_setting_t *_setting;
...setting(const setting& other); // not supported
setting& operator=(const setting& other); // not supported
};
//其他相關
迭代器class
settingiterator;
class
settingconstiterator;
各種異常捕獲類
class
settingtypeexception;
class
settingnotfoundexception;
class
settingnameexception;
class
fileioexception;
class
parseexception;
示例**
下面給出示例**,**中先對配置檔案進行讀取,最後進行修改,涉及常用的各種型別。
#include
#include
#include
#include
#include "libconfig.h++"
using
namespace
std;
int main()
catch(libconfig::fileioexception &e)
catch(libconfig::parseexception &e)
catch(...)
//int
try
catch( libconfig::fileioexception &fioex)
return
0;}
執行結果
[root@localhost linconfig]# g++ -g main.cpp -lconfig++ -o run
[root@localhost linconfig]# ./run
number:100
string:hello world
array[1]:banana
array[2]:orange
map[0]:100->hundred
map[1]:1000->thousand
newconfiguration successfully written to: ./example.cfg
新增的配置會被寫到example.cfg中
layout weight詳解示例
layout wlayout weight 表示該view 控制項佔據父控制項剩餘空間的比例 示例 1.未使用layout weight 第乙個 linearlayout 將父控制項全部覆蓋,無法顯示第二個。如果android layout height wrap content android l...
TCP C S 示例詳解
下面的 實現 echo 回射功能,下面具體分析啟動與終止過程。include unp.h int main int argc,char argv close connfd void str echo int connfd int main int argc,char argv void str cl...
基於libconfig的配置檔案公升級
最近專案中遇到的配置檔案公升級功能 需要保留原始配置 在網上沒有找到比較合適的例子,所以自己便寫了乙個,比較簡單,使用的是libconfig編寫的。只為提供乙個簡單的例子,所以裡面只有一層配置,不保證效率只為實現功能。思路 將原始檔的內容讀出後重新新增到新配置檔案中,但是沒有注重效率演算法,可能配置...