ini 配置文件操作

1. 概述:
该demo主要实现ini配置文件的基本操作,读取和修改
引用iniparser库的地址为:https://github.com/ndevilla/iniparser

2. 测试:
ini 配置文件操作_第1张图片

/*
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

你可能感兴趣的:(linux,文件,linux)