git clone https://github.com/ndevilla/iniparser // 获取源码
cd iniparser //进入iniparser文件夹
make //在文件中执行make命令
iniparser.h中的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对象(内存)
ini文件基本格式如下所示:
vim iniparser.ini(自定义名.ini)
;地址池
[ipaddrpool]
start =192.168.1.1
end =192.168.1.100
[filepath]
leasefile =/var/dhcplease/dhcpd.leases
;网络接口
[network] = "aaaa;bbbb;cccc;dddd" 注意如果value值中带有';'需要加双引号否则只能读取第一个';'前的字符
interface =en1
[opt]
t1 =38
t2 =23
##文件格式介绍
ini文件的最基本组成单元就是key或者叫property,每个key都有一个名称(name)和对应的值(value)
“start” 就是名称name, “192.168.1.1”是对应的值;
我们还可以将多个key归类为一组,即section, 组名定义要独立一行,并用中括号括起来:
[ipaddrpool] start = 192.168.1.1 end = 192.168.1.100
其中 [ipaddrpool] 就是组名, 组成员有”start“、”end“;
在section声明下的keys都会和该section关联起来。一个section的作用域会在下一个section声明的地方结束,如果没有sectionde 的声明,那么该section的结束地方就是该文件末尾。section是不可以嵌套的。 定位一个key是用section:key来表示的. iniparser库处理名称的时候,会统一换成小写,所以section和property的名称命名是大小写无关的。 需要注意的是,每个组下的key的唯一的不能重复的,但不同组下可以存在相同key。
注释要以分号开头:
##对于.c文件的使用
vim ini.c(自定义名.ini)
#include <stdio.h>
#include "iniparser.h"
#include "dictionary.h"
#define PATH "./inperser.ini" //配置文件的路径
int main (int argc, char **argv)
{
dictionary *ini= NULL;
ini = iniparser_load(PATH); //解析dictionary对象并返回(分配内存)dictionary对象
if( ini ==NULL)
{
printf("inipar failure\n");
return -1;
}
printf("%s\n", iniparser_getstring(ini, "ipaddrpool:start", "null"));//打印section为ipaddrpool键值key为start的value
printf("%s\n", iniparser_getstring(ini, "ipaddrpool:end", "null"));打印section为ipaddrpool键值key为end的value
//同理可打印出其他部分值
printf("%d\n",iniparser_getint(ini,"opt:t1",-1); //打印section为opt键值key为t1的value
printf("%d\n",iniparser_getint(ini,"opt:t2",-1); //打印section为opt键值key为t2的value
//同理可打印出其他部分值
iniparser_freedict(ini); //使用完记得free
return 0;
}
编译ini.c文件 执行编译生成的可执行文件即可