菜鸟笔记
提升您的技术认知

libconfig 示例详解-ag真人游戏

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 做了简单的介绍,对于其中重要的几个类进行了概要的说明,然而给出了相关使用示例,示例涉及常用的操作,可以被应用到工程中。

网站地图