C语言Iniparser库实现ini文件读写

目录
  • 一、概述
  • 二、使用
    • 下载
    • 方式一
    • 方式二
  • 三、API函数
  • 四、演示

一、概述

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

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

二、使用

下载

Github:https://github.com/ndevilla/iniparser

方式一

1.编译

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

2.测试

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

3.测试结果

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.文件目录

4.编译

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

5.测试效果

到此这篇关于C语言Iniparser库实现ini文件读写的文章就介绍到这了,更多相关C语言 ini文件读写内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++读取INI配置文件类实例详解

    本文以实例讲解了C++读取配置文件的方法. 一般情况下,我们都喜欢使用ini扩展名的文件作为配置文件,可以读取及修改变量数值,也可以设置新的组,新的变量,本文的实例代码一个是读取INI的定义文件,另一个是CIniFile类实现文件,两者结合,完美实现VC++对INI文件的读写. 用户接口说明:在成员函数SetVarStr和SetVarInt函数中,当iType等于零,则如果用户制定的参数在ini文件中不存在,则就写入新的变量.当iType不等于零,则如果用户制定的参数在ini文件中不存在,就不写

  • C++读写INI配置文件的类实例

    本文实例讲述了C++读写INI配置文件的类.分享给大家供大家参考.具体如下: 1. IniReader.h文件: #ifndef INIREADER_H #define INIREADER_H #include <windows.h> class CIniReader { public: CIniReader(LPCTSTR szFileName); int ReadInteger(LPCTSTR szSection, LPCTSTR szKey, int iDefaultValue); fl

  • C++实现ini文件读写的示例代码

    目录 介绍 1.使用INIReader.h头文件 1.INIReader.h 2.test.ini 3.INIReaderTest.cpp 2.使用ini.h头文件 1.ini.h 2.config.ini 3.example.cpp 3.使用inipp.h头文件 3.1 解析算法 3.2 默认section算法 3.3 Interpolation算法 3.4 代码实现 介绍 一般的ini配置文件由节.键.值组成. [参数](键=值),例如 :key=value; [节]:所有的参数都是以节(s

  • C/C++ INI文件操作实现代码

    一.INI文件用途: 1.存储程序的初始化信息: 2.存储需要保存的数据信息. 二.INI文件结构: 由节名.键名.键值组成.形式如下: [节名] 键名 = 键值 备注:一个INI文件,可以用多个节. 三.读取INI文件 1.WritePrivateProfileString 该函数用于向INI文件中写入一个字符串数据. 函数原型如下: BOOL WritePrivateProfileString( LPCTSTR lpAppName, // pointer to section name LP

  • C语言Iniparser库实现ini文件读写

    目录 一.概述 二.使用 下载 方式一 方式二 三.API函数 四.演示 一.概述 iniparser是针对INI文件的解析器.ini文件则是一些系统或者软件的配置文件.iniparser库的API可以对ini文件(配置文件)进行解析.设置.删除等操作. 常见的 ini 读写开源库有:minIni.inifile.iniparser 二.使用 下载 Github:https://github.com/ndevilla/iniparser 方式一 1.编译 下载后进入文件根目录,使用 make 命

  • C#实现ini文件读写操作

    本文实例为大家分享了C#语言实现ini文件读写操作的具体代码,供大家参考,具体内容如下 1.ini文件是什么? 见百度百科 2.C#语言实现ini文件的读写操作 /// <summary> /// 配置文件 .ini操作类 /// </summary> public class IniFileUtils { /// <summary> /// 写入INI文件 /// </summary> /// <param name="section&qu

  • asp.net INI文件读写类

    复制代码 代码如下: using System; using System.Runtime.InteropServices; using System.Text; using System.IO; namespace Common { /// <summary> /// INI文件读写类. /// </summary>     public class INIFile     {         public string path; public INIFile(string I

  • C++标准库实现WAV文件读写的操作

    在上一篇文章RIFF和WAVE音频文件格式中对WAV的文件格式做了介绍,本文将使用标准C++库实现对数据为PCM格式的WAV文件的读写操作,只使用标准C++库函数,不依赖于其他的库. WAV文件结构 WAV是符合RIFF标准的多媒体文件,其文件结构可以如下: WAV 文件结构 RIFF块 WAVE FOURCC fmt 块 fact 块(可选) data块(包含PCM数据) 首先是一个RIFF块,有块标识RIFF,指明该文件是符合RIFF标准的文件:接着是一个FourCC,WAVE,该文件为WA

  • c#实现ini文件读写类分享

    复制代码 代码如下: /// <summary>    /// 读写INI文件的类.    /// </summary>    public class INIHelper    {        // 读写INI文件相关.        [DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileString", CharSet = CharSet.Ansi)]        pu

  • C#实现读写ini文件类实例

    本文实例讲述了C#实现读写ini文件类.分享给大家供大家参考.具体如下: 这个C#类封装了对INI配置文件进行操作所需的各种函数,包括读取键值.读取键值.删除段落等 using System; using System.Runtime.InteropServices; using System.Text; namespace DotNet.Utilities { /// <summary> /// INI文件读写类. /// </summary> public class INIF

  • C#读写INI文件的方法

    本文实例讲述了C#读写INI文件的方法.分享给大家供大家参考.具体如下: 虽然微软早已经建议在WINDOWS中用注册表代替INI文件,但是在实际应用中,INI文件仍然有用武之地,尤其现在绿色软件的流行,越来越多的程序将自己的一些配置信息保存到了INI文件中. INI文件是文本文件,由若干节(section)组成,在每个带括号的标题下面,是若干个关键词(key)及其对应的值(Value) [Section] Key=Value VC中提供了API函数进行INI文件的读写操作,但是微软推出的C#编程

  • 模块一 GO语言基础知识-库源码文件

    你已经使用过 Go 语言编写了小命令(或者说微型程序)吗? 当你在编写"Hello, world"的时候,一个源码文件就足够了,虽然这种小玩意儿没什么用,最多能给你一点点莫名的成就感.如果你对这一点点并不满足,别着急,跟着学,我肯定你也可以写出很厉害的程序. 我们在上一篇的文章中学到了命令源码文件的相关知识,那么除了命令源码文件,你还能用 Go 语言编写库源码文件.那么什么是库源码文件呢? 在我的定义中,库源码文件是不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他

  • Go语言基础Json序列化反序列化及文件读写示例详解

    目录 概述 JSON序列化 结构体转JSON map转JSON 切片转JSON JSON反序列化 JSON转map JSON转结构体 JSON转切片 写JSON文件 map写入JSON文件 切片写入JSON文件 结构体写入JSON文件 读JSON文件 解码JSON文件为map 解码JSON文件为切片 解码JSON文件为结构体 示例 概述 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的.键值对的数据交换格式.结构由大括号'{}',中括

随机推荐