Ini解析 --iniparser
Posted 尚书左仆射
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ini解析 --iniparser相关的知识,希望对你有一定的参考价值。
Iniparser是针对INI文件的解析器。ini文件则是一些系统或者软件的配置文件。Iniparser库的API可以对ini文件(配置文件)进行解析、设置、删除等操作。
下载iniparser:
Github: https://github.com/ndevilla/iniparser
主要代码都在src目录下:
其中dictionary.h里面声明了一些直接解析ini file的API,iniparser.h里面声明了一些提供用户操作的API。iniparser.h里面的API是对dictionary.h里面API的再次封装。
下载文件后解压,进入目录,执行make命令:
由上可见,make生成了libiniparser.a静态库和libiniparser.so.1动态库。一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,使用这两个目录中的库时不需要进行设置搜索路径即可直接使用,所以可以把这两个库文件直接拷贝到对应的目录下。
一个简单的配置文件示例:
[info]
name=home
mail=123@126.com
[setting]
ip=127.0.0.1
port=8080
indx=home.html
time=20190906
使用方法
将两个生成的库文件libiniparser.a和libiniparser.so.1拷贝到对应的代码目录下或者系统默认的库搜索路径下;将dictionary.h和iniparser.h拷贝到对应代码目录下;在测试代码文件中包含iniparser.h头文件。
代码操作示例:
void test_ini()
const char* iniPath = "settings/ini/info.ini";
const char* changePath = "settings/ini/change.ini";
dictionary *ini = NULL;
ini = iniparser_load(iniPath);
if ( ini == NULL )
cout<<"stone:iniparser_load error!"<<endl;
return;
//get value form ini
const char* info_name = iniparser_getstring(ini, "info:name", "null");
const char* info_mail = iniparser_getstring(ini, "info:mail", "null");
cout<<"In info section:"<<endl;
cout<<"info_name:"<<info_name<<"|info_mail:"<<info_mail<<endl;
int setting_port = iniparser_getint(ini, "setting:port", 0);
cout<<"In setting section:"<<endl;
cout<<"setting_port:"<<setting_port<<endl;
//modify the value of port
iniparser_set(ini, "setting:port", "8899");
//to save value
FILE *fp = NULL;
fp = fopen(changePath, "w");
if( fp == NULL )
cout<<"fopen in error!"<<endl;
goto done;
// every section need to write to file
iniparser_dumpsection_ini(ini, "info", fp);
iniparser_dumpsection_ini(ini, "setting", fp);
fclose(fp);
done:
cout<<"now in done label!"<<endl;
iniparser_freedict(ini);
上述代码对配置文件进行读取、修改和保存操作。Makefile中记得增加-liniparser编译参数。
执行结果:
执行后产生新文件change.ini,其中内容如下:
可见,setting配置段中port字段值已经成功修改了。
以上是关于Ini解析 --iniparser的主要内容,如果未能解决你的问题,请参考以下文章