1. 概述:
该demo主要实现ini配置文件的基本操作,读取和修改
引用iniparser库的地址为:https://github.com/ndevilla/iniparser
/*
iniparser.h 接口介绍
*/
//获取dictionary对象的section个数
int iniparser_getnsec(dictionary *d);
//获取dictionary对象的第n个section的名字
char * iniparser_getsecname(dictionary *d, int n);
//保存dictionary对象到file
void iniparser_dump_ini(dictionary * d, FILE * f);
//保存dictionary对象一个section到file
void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f);
//保存dictionary对象到file
void iniparser_dump(dictionary * d, FILE * f);
//获取dictionary对象某个section下的key个数
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);
//返回idictionary对象的section:key对应的整形值
int iniparser_getint(dictionary * d, const char * key, int notfound);
//返回dictionary对象的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对象并返回(分配内存)dictionary对象
dictionary * iniparser_load(const char * ininame);
//释放dictionary对象(内存)
void iniparser_freedict(dictionary * d);
/*
dictionary.h 接口介绍
*/
//计算关键词的hash值
unsigned dictionary_hash(const char * key);
//建立dictionary对象
dictionary * dictionary_new(int size);
//删除dictionary对象
void dictionary_del(dictionary * vd);
//获取dictionary对象的key值
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对象
void dictionary_dump(dictionary * d, FILE * out);
/*
From : https://github.com/paiminlin/PM
From : https://blog.csdn.net/lpaim/article/details/110148447
Author : PaiMin.lin
Date : 2022.8.23
*/
#include
#include
#include
#include
#include "dictionary.h"
#include "iniparser.h"
#ifdef __cplusplus
extern "C"{
#endif
#define Demoini_MAIN_DEBUG
#ifdef Demoini_MAIN_DEBUG
#define FILENAME "./test.ini"
void create_example_ini_file()
{
FILE * ini;
if ((ini=fopen(FILENAME, "w"))==NULL) {
fprintf(stderr, "iniparser: cannot create %s\n", FILENAME);
return ;
}
fprintf(ini,
"#\n"
"# This is an example of ini file\n"
"#\n"
"\n"
"[Pizza]\n"
"\n"
"Ham = yes ;\n"
"Mushrooms = TRUE ;\n"
"Capres = 0 ;\n"
"Cheese = Non ;\n"
"\n"
"\n"
"[Wine]\n"
"\n"
"Grape = Cabernet Sauvignon ;\n"
"Year = 1989 ;\n"
"Country = Spain ;\n"
"Alcohol = 12.5 ;\n"
"\n");
fclose(ini);
}
int main(){
if(access(FILENAME, F_OK | W_OK | R_OK) < 0)
{
// create a new ini file
create_example_ini_file();
}
dictionary * ini;
int b ;
int i ;
double d ;
const char * s;
ini = iniparser_load(FILENAME);
if (ini==NULL) {
fprintf(stderr, "cannot parse file: %s\n", FILENAME);
return -1 ;
}
printf("****************************\n");
/* Get pizza attributes */
printf("Pizza:\n");
b = iniparser_getboolean(ini, "pizza:ham", -1);
printf("Ham: [%d]\n", b);
b = iniparser_getboolean(ini, "pizza:mushrooms", -1);
printf("Mushrooms: [%d]\n", b);
b = iniparser_getboolean(ini, "pizza:capres", -1);
printf("Capres: [%d]\n", b);
b = iniparser_getboolean(ini, "pizza:cheese", -1);
printf("Cheese: [%d]\n", b);
/* Get wine attributes */
printf("Wine:\n");
s = iniparser_getstring(ini, "wine:grape", NULL);
printf("Grape: [%s]\n", s ? s : "UNDEF");
i = iniparser_getint(ini, "wine:year", -1);
printf("Year: [%d]\n", i);
s = iniparser_getstring(ini, "wine:country", NULL);
printf("Country: [%s]\n", s ? s : "UNDEF");
d = iniparser_getdouble(ini, "wine:alcohol", -1.0);
printf("Alcohol: [%g]\n", d);
printf("****************************\n");
char buf[8];
memset(buf, 0x0, sizeof(buf));
snprintf(buf, 8, "%d", 2020);
iniparser_set(ini, "wine:year", buf);
iniparser_set(ini, "wine:country", "LuFeng");
FILE *fp = fopen(FILENAME, "w");
if (NULL != fp)
{
iniparser_dump_ini(ini, fp);
fclose(fp);
}
iniparser_dump(ini, stderr);
printf("****************************\n");
iniparser_freedict(ini);
return 0;
}
#endif
#ifdef __cplusplus
}
#endif