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前端.主要是用来监 ...
随机推荐
- 我记录综合系统学习研究之用户管理五(如何利用wojilu打造一个全新的SNS应用)
wojilu框架特别适合快速开发多用户分享内容应用,比如知乎,digg这类应用. 对于博客等用户程序,要有4个入口:1)用户展示入口(展示自己的应用) 2)用户后台管理入口(管理自己的应用) 3)聚合 ...
- js数组如何去掉逗号
技术水平比较差,有错误的地方或者大神们有好的方法在介绍下,可以指点出来我加以改正! 1.join去掉逗号',' var a = ['1', '2', '3', '4', '5']; var c = a ...
- Unity3d Fast Indirect illumination Using Two Virtual Spherical Gaussian Lights-Square Enix论文
博主实现(in Unity3d 5) used one spotlight 史克威尔效果展示(夜光引擎?) 博主近期渲染:最近用unity5弄的一些渲染 ---- by wolf96 http:// ...
- JavaScript高级程序设计28.pdf
classList属性 在操作类名时需要通过className属性添加.删除和替换类名 <div class="bd user disabled">...</di ...
- 开源软件授权协议详解(GPL/MPL/LGPL/BSD/Apache Licence/Creative Commons/MIT)
开源在今天的软件业已经很普遍,但开源是否意味着使用者可以对开源后的代码为所欲为呢? 答案是否定的. 开源运动同样有自己的游戏规则和道德准则. 不遵行这些规则不但损害开源运动的健康发展,也会对违规者造成 ...
- mysql数据库引擎问题汇总
可以使用mysql> show engines;查看mysql支持何种引擎, 其中default表明该引擎为默认引擎. 在windows下面的mysql引擎默认为InnoDB,linux下的为 ...
- Android模拟器报"Failed To Allocate memory 8"错误的解决办法
此错误是我们在允许AVD时,选择了默认的AVD插件所致. 解决方法:减少分配的内存大小.修改AVD的config.ini配置文件,将选项“hw.ramSize=1024”从1024改为256.
- TI-Davinci开发系列之二使用CCS5.2TI Simulator模拟环境调试DSP程序
上接博文<TI-Davinci开发系列之一CCS5.2的安装及注意事项>. 如何没有实际的开发板或者仿真器,可以使用CCS自带的TISimulator来学习与熟悉CCS开发调试环境.下面是 ...
- Hibernate查询之Example查询
org.hibernate.criterion.Example 类允许你通过一个给定实例构建一个条件查询. 此实例的属性值将做成查询条件. Cat cat = new Cat(); cat.setSe ...
- 微信小程序开发体验
1. 申请小程序账号 小程序目前不支持个人申请,企业申请后填写基本信息 本来以为用原来公司申请的公众号就可以申请小程序权限,貌似不行 2. 添加开发者 管理员默认拥有开发者所有权限 添加其他开发者 ...