libConfuse的使用
前言
在软件编程中经常会使用到一些参数,在存储方面一般有使用XML的,也有使用文本文件的,或者使用数据库的等。我们软件平台一些参数是使用XML文件存储,在读取方面的速度还可以,但在写回文件速度一般。也有一些参数是使用文本文件存储,读取和保存都是自己实现,适用范围不够广。因此,想使用统一存储方式,以及一套接口来读取和保存参数。经过考察,觉得开源的libConfuse不错。
libConfuse简介
libconfuse 是一个用C实现配置文件解析器库,授权的ISC许可的条件下,它支持段(列表)和值(字符串,整数,浮点数,布尔值或其他部分),以及一些其他功能(如单/双引号字符串,环境变量扩展,功能嵌套include语句)。它可以添加配置文件的能力,使用简单的API使程序读取配置文件非常容易。详细的介绍请访问:http://www.nongnu.org/confuse/,代码托管在github:https://github.com/martinh/libconfuse
下载libConfuse
目前最新的版本是2.7,访问http://www.nongnu.org/confuse/,在download是下载即可。
配置并使用libConfuse
下载完解压缩即可,我运行的环境是ubuntu linux。
(1)生成Makefile。进入confuse-2.7目录,运行./configure命令,会自动生成Makefile文件。
(2)编译libConfuse库。在src目录下运行make命令就可以生成libConfuse库了。
(3)编译使用例子。在examples目录下运行make命令就可以生成几个例子程序。
(4)执行例子程序。在examples目录下有三个例子:ftpconf,reread,simple,分别执行,可以看到运行结果。对照代码看即可快速入门。
移植libConfuse
confuse-2.7目录下有很多内容,对于一般使用都是不需要关心。我希望是把它的源码集成到自己的软件中一起编译。下面简单介绍一下移植的要点。
(1)创建另一个目录confuse,拷贝config.h,以及目录src下confuse.c、confuse.h、lexer.c。
(2)把config.h中的 ” #define ENABLE_NLS 1 “ 注释掉,我的编译不过。你可以不注释,看能否编译得过。
(3)confuse.c中原来的 ” # include <config.h> “ 改为" # include "config.h" "。因为INCLUDE路径变了。
(4)编写一个小例子,自己编写一个Makefile。多尝试,不解析。
(5)如果不知道如何使用API,可以参考三个例子,以及看头文件confuse.h,这里面对每一个函数都描述得很清楚。
性能测试
测试环境有两个,一个是PC上的linux,一个是ARM平台的嵌入linux。配置文件有1.5k行,使用我编写的一个小例子,访问所有的配置项,PC上耗时不超过10ms,ARM上耗时不超过200ms。设置其中某个参数,PC上耗时不超过10ms,ARM上耗时在300左右。速度上还可以,比原来使用XML的方式还是快了不少。本来还想上传我的测试代码以及配置文件,但发现不提供上传附件,就算了。
libConfuse的使用的更多相关文章
- links and softwares
links 普通 http://www.ncpa-classic.com//special/2014gejujie/index.shtml ; 中国大剧院 http://tieba.baidu.com ...
- 安装ganglia
安装ganglia 1.默认已经配置好相关的主机名和Ip地址映射关系 2.默认已经安装好ssh密码登陆 3.默认已经配置好yum源和相关网络配置(如hosts 可在墙外) 4.服务器端安装(除了yum ...
- Ambari自动化卸载shell脚本
#!/bin/bash # Program: # uninstall ambari automatic # History: # 2014/01/13 - Ivan - 2862099249@qq.c ...
- Ganglia安装扩容
现有的环境中Hbase集群的机器需要安装ganglia,遂采取了以下步骤. 查看机器的信息, uname –a cat /etc/issue 查看当前环境是x86的,安装的是red hat 6.4 之 ...
- 大数据之Ganglia安装1
0.前期准备修改主机名.ip.iptables关闭:时间同步:ntpdate -s time.windows.com;软件准备ganglia-3.7.1.tar.gz.ganglia-web-3.7. ...
- Rhel6-cacti+nagios+ganglia(nginx)配置文档
(lnmp平台) 系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.185 server85.example.com 1 ...
- Rhel6-cacti+nagios+ganglia(apache)配置文档
(lamp平台) 系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.119 server19.example.com 1 ...
- 记一次linux服务器问题处理过程
本周二的时候,涛哥找我,说明了一件事,在安装ganglia的时候,发生的一个问题. 在一台suse 10 sp1的服务器上,安装ganglia的一个依赖包,libconfuse.rpm,安装完成之后, ...
- Linux之Ganglia源码安装
一.Ganglia简介: Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点.Ganglia的核心包含gmond.gmetad以及一个Web前端.主要是用来监 ...
随机推荐
- jQuery技术内幕预览版.pdf2
第二章 构造jQuery对象 jQuery对象是一个类数组对象,含有连续的整型属性.length属性和大量的jQuery方法,$()是jQuery()的缩写 构造函数jQuery() 如果调用构造函数 ...
- jQuery的文档操作方法
jQuery 文档操作方法 这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html(). 方法 描述 addClass() 向匹配的元素添加指定的类名. after() 在匹配的元素之 ...
- Linux无处不在
Linux is Everywhere从政府.教育.商业和非盈利组织.科研机构几个方面展示了现在都有哪些地方用了Linux.
- Hibernate的集合映射(Set、List、Array、Map、Bag)
POJOs如下: Customer类------>customer表 Order类对应---------->orders表 customer(1)<-------------- ...
- 一个寻找.jar 和.zip文件中class文件的工具
相信很多人跟我一样,苦于在各种包之间,不知道Class存在什么地方,为此,自己写了一个小工具,来寻找目录下的Class文件 支持 目录查询,支持带包路径查询 入口Entrance.java packa ...
- foreach -begin -process -end
gc d:\vm.txt|foreach -begin {write-host "It's beginning."} -process {$_ +"aa"} ...
- Matlab mex编程
经典教程:mex 编程 http://classes.soe.ucsc.edu/ee264/Fall11/cmex.pdf Matlab 快速编程: http://www.ee.columbia.ed ...
- Android开发环境搭建(图文教程)
昨天又搭建了一次Android的开发环境,尝试了好几种方式,也遇到了一些问题,在此分享一下. 注意:官网公布的最新版本号的SDK和ADT(23.0.0),对于和Eclipse集成的开发环境是有BUG存 ...
- Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解
一.概念简介: Redis: Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis, ...
- [Redux] Normalizing the State Shape
We will learn how to normalize the state shape to ensure data consistency that is important in real- ...