libconfig 示例詳解

2021-07-27 04:11:23 字數 3752 閱讀 7842

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編寫的。只為提供乙個簡單的例子,所以裡面只有一層配置,不保證效率只為實現功能。思路 將原始檔的內容讀出後重新新增到新配置檔案中,但是沒有注重效率演算法,可能配置...