前言

在软件编程中经常会使用到一些参数,在存储方面一般有使用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. java常用重构优化总结--自己亲身体验

    代码重构  6大原则:    单一职责原则(一个类最好最好只有一种行为动机,太多承担职责会导致耦合度太高).    开放封闭原则(功能可以扩展,但是不可以内部修改).    依赖倒转原则(应该依赖抽象 ...

  2. HTML5与CSS3权威指南.pdf4

    拖放API HTML5实现了直接拖放操作API,简化HTML4利用mousedown.mousemove等事件实现的操作 实现拖放的步骤 1要将被拖动元素的draggable属性设置为true,img ...

  3. Dot Net设计模式—MVC模式

    1 MVC设计模式简介 MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好的实现了数据层与表示层的分离.MVC作为一种开发模型,通常用于分布式应用系统的设计和分析中,以及用于确定 ...

  4. OpenCL memory object 之 传输优化

    转载自:http://www.cnblogs.com/mikewolf2002/archive/2011/12/18/2291741.html 首先我们了解一些优化时候的术语及其定义: 1.defer ...

  5. 1 storm基本概念 + storm编程规范及demo编写

    本博文的主要内容有 .Storm的单机模式安装 .Storm的分布式安装(3节点)   .No space left on device .storm工程的eclipse的java编写 http:// ...

  6. Java的MongoDB驱动及读写策略

    网上看见一篇博文,详细讲了MongoDB读写策略,将来生产会遇到类似的问题,转来备查. 指定新mongo实例: Mongo m = new Mongo(); Mongo m = new Mongo( ...

  7. mysql left( right ) join 使用on 与where的差异

    之前一直很困扰为什么left join要么一查没有数据,要么出现很多条重复数据. 百思不得其解,后来在网上到处找资料,总算明白了. 一定要理解下面几点:  (1)主表条件在on后面时附表只取满足主表筛 ...

  8. Ajax 整理总结(进阶)

    Ajax 进阶学习要点:1.加载请求2.错误处理3.请求全局事件4.JSON 和 JSONP5.jqXHR 对象 一.加载请求 在 Ajax 异步发送请求时,遇到网速较慢的情况,就会出现请求时间较长的 ...

  9. Android_设备隐私获取,忽略6.0权限管理

    1.前言 (1).由于MIUI等部分国产定制系统也有权限管理,没有相关api,故无法判断用户是否允许获取联系人等隐私.在Android 6.0之后,新增权限管理可以通过官方api判断用户的运行状态: ...

  10. TCP参数设置

    我们这里应用的是CentOS5.3,并内核使用的是2.6.18-128.el5PAE #1 SMP .修改部分TCP ,有的是为了提高性能与负载,但是存在降低稳定性的风险.有的则是安全方面的配置,则有 ...