• <tr id='3za3pG'><strong id='3za3pG'></strong><small id='3za3pG'></small><button id='3za3pG'></button><li id='3za3pG'><noscript id='3za3pG'><big id='3za3pG'></big><dt id='3za3pG'></dt></noscript></li></tr><ol id='3za3pG'><option id='3za3pG'><table id='3za3pG'><blockquote id='3za3pG'><tbody id='3za3pG'></tbody></blockquote></table></option></ol><u id='3za3pG'></u><kbd id='3za3pG'><kbd id='3za3pG'></kbd></kbd>

    <code id='3za3pG'><strong id='3za3pG'></strong></code>

    <fieldset id='3za3pG'></fieldset>
          <span id='3za3pG'></span>

              <ins id='3za3pG'></ins>
              <acronym id='3za3pG'><em id='3za3pG'></em><td id='3za3pG'><div id='3za3pG'></div></td></acronym><address id='3za3pG'><big id='3za3pG'><big id='3za3pG'></big><legend id='3za3pG'></legend></big></address>

              <i id='3za3pG'><div id='3za3pG'><ins id='3za3pG'></ins></div></i>
              <i id='3za3pG'></i>
            1. <dl id='3za3pG'></dl>
              1. <blockquote id='3za3pG'><q id='3za3pG'><noscript id='3za3pG'></noscript><dt id='3za3pG'></dt></q></blockquote><noframes id='3za3pG'><i id='3za3pG'></i>

                博客专栏

                EEPW首页 > > C/C++服务器开发的必备利器–libconfig

                C/C++服务器开发的必备利器–libconfig

                发布人: 时间:2023-03-05 来源:工程师
                C/C++服务器开发的必备利器–libconfig

                http://www.leoox.com/?p=311

                 

                程序肯定需要一份配置文件,要不然,自己的程序不是“可配置”的,自己都不好意思往“高大上”靠拢。言归正传,以前自己写代码,配置文件的读写都是各式各样的,有用过xml,有用过其他项目copy过来的。看开源●代码的时候,也是各△式各样的,比如redis的,Nginx等等。有时候就在想,配置文件的解析还真是麻烦,要自己处理一堆的字符串,有空的※时候自己整理一下Nginx的源码,复用Nginx的配置代码,加强自己的代码ξ 库。但最近才发现,原来已经有一个很优〓秀的C/C++配置库libconfig一直在等着我了。

                   认识libconfig

                 

                libconfig库的官方◇网站在:http://www.hyperrealm.com/libconfig/

                确实是非常优秀的C/C++配置库,我们程序员完全可以〓从解析字符串的“苦力”中解脱出来。多复杂的配置项,都能满足,来看看。

                       A configuration consists of a group of settings, which associate names with values. A value can be one of the following:

                • A scalar value: integer, 64-bit integer, floating-point number, boolean, or string

                • An array, which is a sequence of scalar values, all of which must have the same type

                • A group, which is a collection of settings

                • A list, which is a sequence of values of any type, including other lists

                 

                简单▲直译一下:

                一个⊙配置项,可以理解为我们最常见的key-value的形式。key就是你的配置的名字了。那优秀就优秀在value上了。value支持的类型有:

                1、常见的数据类▅型:

                整数(int):可以用10进制和16进制表示。0x打头的数字libconfig会自动解析为16进制的数字。

                64位整数(int64_t):在数字的后面加①上L即可。

                浮点数(float):个人不太喜欢用这个类型。

                布尔数(bool):true或者false。不区分大小写。

                字符串(string):这个字符串↓非常强大。

                a、支持转义字♂符\\’, ‘\f’, ‘\n’, ‘\r’,‘\x’ and ‘\t’。

                b、相邻的字符串libconfig会自动拼接。这样太常的内容,我们可以多行来写,可读性非常好。比如:

                example = “hello world”;  等价于

                example = “hello”

                ” world”;

                【注意】

                       我们可以使用’=’,也√可以使用’:’来作为赋值号。既然是C/C++程序员,还是使用’=’号看得舒服一些。

                和C/C++的注释一样,/**/就是跨行的注释。 //就是单行注释。当然还支持脚本语言的注释符号#,#也是单行注释。但是特殊的是,如果注释符在双引号中使用,那就不再是注释符了,libconfig会解析为正常的明文。

                2、数组结构。和平常我们使用的数组是一样一样的,数组的各个№元素都必须是相同的数据类型。

                3、群组结构。这个可以理〇解为一个容器。这个容器里面,我们可以放置很多个配置项。当然这些配置项的→→value也可以继续是群组。

                4、列表结构。这个列表和我们▓C++常用的STL里的list结构可不太一样。这个列表结构里面的元素不要求具】备相同的数据类型,元素1是int,元素2可以是string,元素3可以是数组,元素4可以是一个『群组,元素5可以是另一个列表。

                 

                可以说,正是因为value的多姿多彩,才给了我们程序员无限的发挥空间。通过群组结构和列表结构,我们可以很方便灵活的进行各种变态的配置读取。除了读取配置,可不要忘记了libconfig还有两只手的哦:必要的时候,我们可以把内存里面的一些值,通过libconfig生成一份标准的配置文件。

                 

                   体验libconfig

                动手用libconfig进行一个hello world的配置吧!把value支持的所有数据类型都用上,加深理解。

                 

                值得说」明的是,libconfig是通过路径来读取某一个配置的。比如log.log_path这个路径』对应的是log_path这@ 个配置项,

                server.[0].addr这个路径对应的▆是业务服务器列表的第一个元素里面的addr这个配置项。

                 

                  libconfig的代码样例

                不写一段hello world的代码,是算不上真正接触了libconfig的。libconfig提供了C和C++的API。先用C++来爽一下吧。

                首先▽就是要下载安装libconfig的库。这个很简单,到官网下载,然后./configure & make & make install就可以了。

                 

                编译和运行一下:

                 


                *博客内容为网友个人发布,仅代表博▂主个人观点,如有侵权请联系工作人员删除。


                技术专区

                关闭