【c语言】使用conf-c解析/创建配置文件

在开始之前首先要先吐槽下最近的状态,话说最近一段时间的注意力是灰常滴难以集中,整个脑袋一团浆糊,情绪特别地浮躁,状态是灰常滴糟糕啊,这也导致了conf-c这个坑我用了近一个月的时间才填满,而事实上谁能想到我在写主框架时候仅仅只花了一到两个晚上,这真真是及其痛苦的一件事情,不知道男人是否每个月也会有那么几天。。。。。。。(吐槽完毕)

在写一些应用的时候我们通常需要使用配置文件来保存以及设置一些应用程序在运行时需要的一些参数,这些参数可以让我们的程序更具灵活性以及更强的功能性和可操作性。之前我总是在需要配置文件的应用中自己手动去写一些解析参数的函数来完成参数的解析,但这灰常滴让人头痛,因为这些配置文件大多格式都是差不多的,而且总是写一些重复的代码是很不科学的,有鉴于此我便想写一个“通用”的解析/创建配置文件的库来完成这项工作。

conf-c就是这个库,它使用c语言编写,conf-c解析的配置文件和linux下一些配置文件很像,比如以#字开头的行为注释行,而键与参数之间使用=进行分隔,很多linux配置文件是以空格为分隔符的,但为了能够支持更多的参数比如一些特殊字符(‘ ” # 空白符)所以我使用了=作为键/值参数的分隔,同时考虑到一个键可能会有多个参数,所以在值(即参数)部分又以,作为分隔来表明多个参数。最后conf-c将解析的参数放入一个散列表中以供使用。

conf-c解析的配置文件格式大概是以下这个样子的

当只有一个参数时

key = arg1

当有多个参数时

key = arg1,arg2,arg3,…

当参数中有特殊字符使用”或者’进行包裹,如

key = ‘123 456’
或者
key = “123 456”


key = ‘#123′,’#456′ #这里则是注释部分
这样的参数有两个值,它们分别是#123和#456

双引号与单引号的区别:

双引号与单引号并没有使用实质上的区别,它们都可以包裹特殊字符,但当参数中有’或者”时则它们的区别便出来了

比如

key = ’12″3’
参数是12″3

key = “12’3”
参数是12’3

所以当参数中需要’时则使用”进行包裹,而参数中有”时则使用’进行包裹

这里最后再说一个特殊字符,那就是逗号,如果参数中没有逗号则它是多值的分隔符,如果使用单引号或者双引号进行包裹时则逗号是参数中的一部分

key = ‘123,’,456,78

则参数分别是 123,和456和78

conf-c解析和创建的配置文件格式是这个样子的,下面我们来看看conf-c的两个数据结构

CONF *conf;
CONF_VALUE *vaule;

前者是我们解析配置文件时需要使用到的数据结构,而后者则是我们的键/值参数数据结构
前者我们不作说明,我们说说value

value有两个参数,分别是
char *key;
char **value;

其中key便是键,而value则是参数值的字符数组,value[0]表示第一个值,如果有多个值的情况下,则value[1]为第二个值,以此类推

如:

key = ‘123 456’,789
则value[0]为123 456
value[1]为789

conf-c解析和读取参数的方法也比较简单,总得来说大概分为以下3步:

第一步:
加载并初始化配置文件

CONF *conf_open(char *path);

第二步:
解析配置文件

int conf_parse(CONF *conf);

第三步:
取出参数

CONF_VALUE *conf_value_get(CONF *conf,const char *key);

具体的操作可以看两个示例代码

conf-c的源代码地址是
https://github.com/briskgreen/conf-c
如果访问不了(至于为什么我就不说了,你懂得)
git.oschina.net/brisk/conf-c

下面是conf-c的两个示例代码,该代码可以从conf-c项目中的example中找到

解析配置文件代码

configrc文件

创建配置文件代码

使用gcc编译时使用使用-lconf链接库

–阅读次数(50)

发表评论

电子邮件地址不会被公开。

*