前言

在软件编程中经常会使用到一些参数,在存储方面一般有使用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的使用的更多相关文章

  1. links and softwares

    links 普通 http://www.ncpa-classic.com//special/2014gejujie/index.shtml ; 中国大剧院 http://tieba.baidu.com ...

  2. 安装ganglia

    安装ganglia 1.默认已经配置好相关的主机名和Ip地址映射关系 2.默认已经安装好ssh密码登陆 3.默认已经配置好yum源和相关网络配置(如hosts 可在墙外) 4.服务器端安装(除了yum ...

  3. Ambari自动化卸载shell脚本

    #!/bin/bash # Program: # uninstall ambari automatic # History: # 2014/01/13 - Ivan - 2862099249@qq.c ...

  4. Ganglia安装扩容

    现有的环境中Hbase集群的机器需要安装ganglia,遂采取了以下步骤. 查看机器的信息, uname –a cat /etc/issue 查看当前环境是x86的,安装的是red hat 6.4 之 ...

  5. 大数据之Ganglia安装1

    0.前期准备修改主机名.ip.iptables关闭:时间同步:ntpdate -s time.windows.com;软件准备ganglia-3.7.1.tar.gz.ganglia-web-3.7. ...

  6. Rhel6-cacti+nagios+ganglia(nginx)配置文档

    (lnmp平台) 系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.185 server85.example.com 1 ...

  7. Rhel6-cacti+nagios+ganglia(apache)配置文档

    (lamp平台) 系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.119 server19.example.com 1 ...

  8. 记一次linux服务器问题处理过程

    本周二的时候,涛哥找我,说明了一件事,在安装ganglia的时候,发生的一个问题. 在一台suse 10 sp1的服务器上,安装ganglia的一个依赖包,libconfuse.rpm,安装完成之后, ...

  9. Linux之Ganglia源码安装

    一.Ganglia简介: Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点.Ganglia的核心包含gmond.gmetad以及一个Web前端.主要是用来监 ...

随机推荐

  1. Spring之HelloWorld再起

    第一步:打开File->New->Other…,选择Java Project,创建标准Java项目. 第二步:在项目下添加lib文件夹用于存放jar文件,resources用于存放xml配 ...

  2. 开发神器之--Sublime Text

    原来还有这么个神器啊,忍痛丢掉了notepad++,投入她的怀抱!! 使用和介绍就不写了,大牛们已经整理了. 官网:http://www.sublimetext.com/ 入门及心得:http://w ...

  3. 前端模块化开发学习之gulp&browserify篇

     随着web应用的发展,前端的比重占得越来越多,编写代码从而也越来越复杂.而通常我们需要将不同功能或者不同模块的代码分开写,最后在html中一起加载,这样做是可以的,但是当你需要进行维护或者是二次开发 ...

  4. [zz] makefile中=和:=的区别

    转载自:http://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html 在Makefile中我们经常看到 = := ?= +=这几个赋 ...

  5. HW4.20

    public class Solution { public static void main(String[] args) { boolean isPrime = true; int count = ...

  6. MySQL数据库MyISAM和InnoDB存储引擎的比较(转)

    MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种.这里介绍关于这两种引擎的一些基本概念(非深入介绍). MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索 ...

  7. 《神经网络和深度学习》系列文章三:sigmoid神经元

    出处: Michael Nielsen的<Neural Network and Deep Leraning>,点击末尾“阅读原文”即可查看英文原文. 本节译者:哈工大SCIR硕士生 徐伟 ...

  8. hdoj 1869 六度分离【最短路径求两两边之间最长边】

    六度分离 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. 模仿微信&quot;转你妹&quot;游戏

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. C# 动态创建出来的窗体间的通讯 delegate3

    附件1:http://files.cnblogs.com/xe2011/CSharp_WindowsForms_delegate03.rar 一个RTF文件管理器 描述 Form2,Form3,For ...