Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31039992
  • 博文数量: 230
  • 博客积分: 2868
  • 博客等级: 少校
  • 技术积分: 2223
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-08 21:48
个人简介

Live & Learn

文章分类

全部博文(230)

文章存档

2022年(2)

2019年(5)

2018年(15)

2017年(42)

2016年(24)

2015年(13)

2014年(1)

2012年(5)

2011年(58)

2010年(56)

2009年(9)

我的朋友

分类: LINUX

2018-06-01 23:49:15

一.交叉编译ini解析库

1.官方网站http://ndevilla.free.fr/iniparser
建议下载:

下载iniparser-3.1.tar.gz

2.解压

tar -zxvf iniparser-3.1.tar.gz 
cd tar -zxvf iniparser

3.修改makefile

CC	= gcc  修改为--> CC	= arm-none-linux-gnueabi-gcc
AR	= ar   修改为--> AR	= arm-none-linux-gnueabi-ar

4.编译

make

5.拷贝src下的头文件dictionary.h和iniparser.h以及压缩包目录下的静态库libiniparser.a和动态库libiniparser.so.0到目标文件系统的对应目录下

二.iniparser库API

int iniparser_getnsec(dictionary * d);	//获取dictionary对象的section个数
char * iniparser_getsecname(dictionary * d, int n);	//获取dictionary对象的第n个section的名字
void iniparser_dump_ini(dictionary * d, FILE * f);	//保存dictionary对象到file
void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f);	//保存dictionary对象一个section到file
void iniparser_dump(dictionary * d, FILE * f);	//保存dictionary对象到file
int iniparser_getsecnkeys(dictionary * d, char * s);	//获取dictionary对象某个section下的key个数
char ** iniparser_getseckeys(dictionary * d, char * s);	//获取dictionary对象某个section下所有的key
char * iniparser_getstring(dictionary * d, const char * key, char * def);	//返回dictionary对象的section:key对应的字串值
int iniparser_getint(dictionary * d, const char * key, int notfound);	//返回idictionary对象的section:key对应的整形值
double iniparser_getdouble(dictionary * d, const char * key, double notfound);	//返回dictionary对象的section:key对应的双浮点值
int iniparser_getboolean(dictionary * d, const char * key, int notfound);	//返回dictionary对象的section:key对应的布尔值
int iniparser_set(dictionary * ini, const char * entry, const char * val);	//设置dictionary对象的某个section:key的值
void iniparser_unset(dictionary * ini, const char * entry);	//删除dictionary对象中某个section:key
int iniparser_find_entry(dictionary * ini, const char * entry) ;	//判断dictionary对象中是否存在某个section:key
dictionary * iniparser_load(const char * ininame);	//解析dictionary对象并返回(分配内存)dictionary对象
void iniparser_freedict(dictionary * d);	//释放dictionary对象(内存)
unsigned dictionary_hash(const char * key);	//计算关键词的hash值
dictionary * dictionary_new(int size);	//创建dictionary对象
void dictionary_del(dictionary * vd);	//删除dictionary对象
char * dictionary_get(dictionary * d, const char * key, char * def);	//获取dictionary对象的key值
int dictionary_set(dictionary * vd, const char * key, const char * val);	//设置dictionary对象的key值
void dictionary_unset(dictionary * d, const char * key);	//删除dictionary对象的key值
void dictionary_dump(dictionary * d, FILE * out);	//保存dictionary对象

编写ini文件:

#ini file for example

[tcp]
;for tcp communication port = 8000;
ip = 127.0.0.1;
family = AF_INET;

[serial port]
;for serial port communication

speed = 9600; 
			
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

测试文件:

/*************************************************************************
    > File Name: example.c
    > Author: AnSwEr
    > Mail: 1045837697@qq.com
    > Created Time: 20151022日 星期四 203710************************************************************************/ #include  #include  #include "iniparser.h" int main(void)
{
    dictionary *ini; int n = 0;
    char *str;

    ini = iniparser_load("example.ini");//parser the file if(ini == NULL)
    {
        fprintf(stderr,"can not open %s","example.ini"); exit(EXIT_FAILURE);
    } printf("dictionary obj:\n");
    iniparser_dump(ini,stderr);//save ini to stderr printf("\n%s:\n",iniparser_getsecname(ini,0));//get section name
    n = iniparser_getint(ini,"tcp:port",-1); printf("port : %d\n",n);

    str = iniparser_getstring(ini,"tcp:ip","null"); printf("ip : %s\n",str);

    str = iniparser_getstring(ini,"tcp:family","null"); printf("family : %s\n",str); printf("\n%s:\n",iniparser_getsecname(ini,1));
    n = iniparser_getint(ini,"serial port:speed",-1); printf("speed : %d\n",n);

    iniparser_freedict(ini);//free dirctionary obj return 0;
} 
		
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

运行:

arm-linux-gcc example.c -o example -L. -liniparser ./example 
			
  • 1
  • 2

结果:

dictionary obj:
[tcp]=UNDEF
[tcp:port]=[8000]
[tcp:ip]=[127.0.0.1]
[tcp:family]=[AF_INET]
[serial port]=UNDEF
[serial port:speed]=[9600]

tcp: port : 8000 ip : 127.0.0.1 family : AF_INET

serial port:
speed : 9600  
		
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1

阅读(2002) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~