温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么使用C语言Iniparser库实现ini文件读写

发布时间:2023-03-20 15:31:26 来源:亿速云 阅读:307 作者:iii 栏目:开发技术

这篇“怎么使用C语言Iniparser库实现ini文件读写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用C语言Iniparser库实现ini文件读写”文章吧。

    一、概述

    iniparser是针对INI文件的解析器。ini文件则是一些系统或者软件的配置文件。iniparser库的API可以对ini文件(配置文件)进行解析、设置、删除等操作。

    常见的 ini 读写开源库有:minIni、inifile、iniparser

    二、使用

    方式一

    1.编译

    下载后进入文件根目录,使用 make 命令编译,编译完成后会生成 libiniparser.a 和 libiniparser.so.1 文件

    2.测试

    iniparser 提供了测试程序,进入 example 目录,使用 make命令编译,完成后会生成 iniexample 执行文件

    3.测试结果

    怎么使用C语言Iniparser库实现ini文件读写

    4.注意事项

    使用链接文件时,可以参考 example 目录下的 Makefile 文件

    方式二

    此方法使用比较简单,直接将 src 目录下的文件拷贝到工程中即可,使用方式和自己编写的 .c 和 .h 文件一样

    三、API函数

    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); 
     
    /* 打印 ini 文件内容 */
    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);

    四、演示

    1.test.ini 文件

    #
    # 测试文件
    #
     
    [Node]
    Test                           = 1234

    2.test.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
     
    #include "iniparser.h"
     
     
    #define FILE_INI "test.ini"
     
    /**
     * @brief 读取 ini 文件的配置信息
     * 
     * @param read_buf 读取缓冲去
     * @param return 返回操作结果
     */
    int get_ini_info(int *read_buf)
    {
        dictionary  *ini;
     
        ini = iniparser_load(FILE_INI);
        if (ini==NULL) {
            fprintf(stderr, "cannot parse file: %s\n", FILE_INI);
            return -1;
        }
     
        /* 打印文件内容 */
        // iniparser_dump(ini, stderr);
     
        /* 读取压力等级的判断信息 */
        *read_buf = iniparser_getint(ini, "node:test", -1);
     
        iniparser_freedict(ini);
        return 0;
    }
     
    /**
     * @brief 写入 ini 文件的配置信息
     * 
     * @param write_buf 写入缓冲区
     * @param return 返回操作结果
     */
    int set_ini_info(const char *write_buf)
    {
        dictionary  *ini;
        FILE *fp = NULL;
     
        ini = iniparser_load(FILE_INI);
        if (ini==NULL) {
            fprintf(stderr, "cannot parse file: %s\n", FILE_INI);
            return -1;
        }
     
        /* 写入压力等级的判断信息 */
        iniparser_set(ini, "node:test", write_buf);
     
        /* 将信息保存到文件中 */
        fp = fopen(FILE_INI, "w");
        if( fp == NULL ) {
            fprintf(stderr, "stone:fopen error!\n");
            return -1;
        }
        iniparser_dump_ini(ini, fp);
     
        fclose(fp);
        iniparser_freedict(ini);
        return 0;
    }
     
    int main (int argc, char **argv)
    {
        int num = 0;
        set_ini_info("1234");
        get_ini_info(&num);
        printf("date is: %d \n", num);
    }

    3.文件目录

    怎么使用C语言Iniparser库实现ini文件读写

    4.编译

    gcc test.c dictionary.c iniparser.c -o test

    5.测试效果

    怎么使用C语言Iniparser库实现ini文件读写

    以上就是关于“怎么使用C语言Iniparser库实现ini文件读写”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI