libconfig (http://www.hyperrealm.com/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
{
public:
config(); //默认构造函数
virtual ~config(); //析构函数
...
void read(file *stream); //以文件流的方式读取配置
void write(file *stream) const;//以文件流的方式修改配置
void readfile(const char *filename); //读取指定文件名的配置
void writefile(const char *filename);//修改指定文件名的配置
setting & lookup(const char *path) const; //
inline setting & lookup(const std::string &path) const
{ return(lookup(path.c_str())); }
bool exists(const char *path) const; //判断是否存在某项配置名
inline bool exists(const std::string &path) const
{ return(exists(path.c_str())); }
//查找指定节点的值
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
{
friend class config;
...
public:
virtual ~setting();
inline type gettype() const { return(_type); }
setting & lookup(const char *path) const;
inline setting & lookup(const std::string &path) const
{ return(lookup(path.c_str())); }
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)
{ return(add(name.c_str(), type)); }
setting & add(type type);
bool exists(const char *name) const;
//判断某项配置是否存在
inline bool exists(const std::string &name) const
{ return(exists(name.c_str())); }
...
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
运行结果
[root@localhost linconfig]# g -g main.cpp -lconfig -o run
[root@localhost linconfig]# ./run
number:100
string:hello world
array[0]:apple
array[1]:banana
array[2]:orange
map[0]:100->hundred
map[1]:1000->thousand
new configuration successfully written to: ./example.cfg
新增的配置会被写到example.cfg中
本文对libconfig 做了简单的介绍,对于其中重要的几个类进行了概要的说明,然而给出了相关使用示例,示例涉及常用的操作,可以被应用到工程中。