iniparser库
*
– iniparser库介绍
– 下载库
– iniparser中的API
– dictionary中的一些API
– 测试代码
iniparser库介绍
iniparser是针对INI文件的解析器。ini文件则是一些系统或者软件的配置文件。iniparser库的API可以对ini文件(配置文件)进行解析、设置、删除等操作。
基本组成单元:key 或者 称之为 property, 每个key都有一个名称(name)和对应的值(value),例如:
host = iot-06z00i99uliom9a.mqtt.iothub.aliyuncs.com
名称是 host
值是 iot-06z00i99uliom9a.mqtt.iothub.aliyuncs.com
其中address就是组名,组成员有host和port。
; 下载库
git clone https:
下载好后,进入iniparser,在进入src,里面有四个文件
说明:dictionary.h里面声明了一些直接解析ini file的API,iniparser.h里面声明了一些提供用户操作的API。iniparser.h里面的API是对dictionary.h里面API的再次封装,以提供用户友好性。
将这四个文件放入自己的项目中即可。
iniparser中的常用API
int iniparser_getnsec(dictionary * d);
char * iniparser_getsecname(dictionary * d, int n);
void iniparser_dump_ini(dictionary * d, FILE * f);
void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f);
int iniparser_getsecnkeys(dictionary * d, char * s);
char ** iniparser_getseckeys(dictionary * d, char * s);
char * iniparser_getstring(dictionary * d, const char * key, char * def);
int iniparser_getint(dictionary * d, const char * key, int notfound);
double iniparser_getdouble(dictionary * d, const char * key, double notfound);
int iniparser_getboolean(dictionary * d, const char * key, int notfound);
int iniparser_set(dictionary * ini, const char * entry, const char * val);
void iniparser_unset(dictionary * ini, const char * entry);
int iniparser_find_entry(dictionary * ini, const char * entry) ;
dictionary * iniparser_load(const char * ininame);
void iniparser_freedict(dictionary * d);
dictionary中的一些API
unsigned dictionary_hash(const char * key);
dictionary * dictionary_new(int size);
void dictionary_del(dictionary * vd);
char * dictionary_get(dictionary * d, const char * key, char * def);
int dictionary_set(dictionary * vd, const char * key, const char * val);
void dictionary_unset(dictionary * d, const char * key);
void dictionary_dump(dictionary * d, FILE * out);
测试代码
[ipaddrpool]
start = 192.168.1.1
end = 192.168.1.100
[filepath]
leasefile = /var/dhcplease/dhcpd.leases
[network]
interface = en1
[opt]
dns1 = 8.8.8.8
dns2 = 8.8.8.8
subnet = 255.255.255.0
router = 192.168.3.1
domain = local
lease = 864
t1 = 432
t2 = 756
#include
#include "iniparser.h"
#include "dictionary.h"
#define PATH "./config.ini"
int main (int argc, char **argv)
{
FILE *fp = NULL;
FILE *fp1 =NULL;
dictionary *inip = NULL;
int i,s,j,n;
char **ptr;
char *keys;
char *str;
inip = iniparser_load(PATH);
if(!inip)
{
printf("iniparser_load failure\n");
return -1;
}
n = iniparser_getnsec(inip);
if(n)
{
for(i = 0; i < n; i++)
{
printf("%s\n",iniparser_getsecname(inip,i));
s= iniparser_getsecnkeys(inip,iniparser_getsecname(inip,i));
keys[s];
str = iniparser_getsecname(inip,i);
iniparser_getseckeys(inip,str,keys);
ptr = keys;
for(j = 0; j < s; j++)
{
printf("%s\n",*ptr);
ptr++;
}
}
}
else
{
printf("This file has no section!\n");
return -1;
}
iniparser_set(inip,"ipaddrpool:start","192");
iniparser_set(inip,"ipaddrpool:end","198");
iniparser_unset(inip,"opt:dns1");
fp1 = fopen(PATH,"w");
iniparser_dump_ini(inip,fp1);
iniparser_freedict(inip);
fclose(fp1);
return 0;
}
Original: https://www.cnblogs.com/Ye-Wei/p/16728606.html
Author: 西故黄鹤楼
Title: 【MQTT】iniparser库的安装和使用
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/606324/
转载文章受原作者版权保护。转载请注明原作者出处!