【MQTT】iniparser库的安装和使用

iniparser库

*
iniparser库介绍
下载库
iniparser中的API
dictionary中的一些API
测试代码

iniparser库介绍

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

【MQTT】iniparser库的安装和使用
基本组成单元:key 或者 称之为 property, 每个key都有一个名称(name)和对应的值(value),例如: host = iot-06z00i99uliom9a.mqtt.iothub.aliyuncs.com 名称是 host值是 iot-06z00i99uliom9a.mqtt.iothub.aliyuncs.com其中address就是组名,组成员有host和port。

; 下载库

git clone https:

下载好后,进入iniparser,在进入src,里面有四个文件

【MQTT】iniparser库的安装和使用
说明:dictionary.h里面声明了一些直接解析ini file的API,iniparser.h里面声明了一些提供用户操作的API。iniparser.h里面的API是对dictionary.h里面API的再次封装,以提供用户友好性。
将这四个文件放入自己的项目中即可。

iniparser中的常用API

int iniparser_getnsec(dictionary * d);
char * iniparser_getsecname(dictionary * d, int n);
void iniparser_dump_ini(dictionary * d, FILE * f);
void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f);
int iniparser_getsecnkeys(dictionary * d, char * s);
char ** iniparser_getseckeys(dictionary * d, char * s);
char * iniparser_getstring(dictionary * d, const char * key, char * def);
int iniparser_getint(dictionary * d, const char * key, int notfound);
double iniparser_getdouble(dictionary * d, const char * key, double notfound);
int iniparser_getboolean(dictionary * d, const char * key, int notfound);
int iniparser_set(dictionary * ini, const char * entry, const char * val);
void iniparser_unset(dictionary * ini, const char * entry);
int iniparser_find_entry(dictionary * ini, const char * entry) ;
dictionary * iniparser_load(const char * ininame);
void iniparser_freedict(dictionary * d);

dictionary中的一些API

unsigned dictionary_hash(const char * key);
dictionary * dictionary_new(int size);
void dictionary_del(dictionary * vd);
char * dictionary_get(dictionary * d, const char * key, char * def);
int dictionary_set(dictionary * vd, const char * key, const char * val);
void dictionary_unset(dictionary * d, const char * key);
void dictionary_dump(dictionary * d, FILE * out);

测试代码

[ipaddrpool]
start                          = 192.168.1.1
end                            = 192.168.1.100

[filepath]
leasefile                      = /var/dhcplease/dhcpd.leases

[network]
interface                      = en1

 [opt]
 dns1                           = 8.8.8.8
 dns2                           = 8.8.8.8
 subnet                         = 255.255.255.0
 router                         = 192.168.3.1
 domain                         = local
 lease                          = 864
 t1                             = 432
 t2                             = 756
#include
#include "iniparser.h"
#include "dictionary.h"

#define PATH "./config.ini"

int main (int argc, char **argv)
{
    FILE        *fp = NULL;
    FILE        *fp1 =NULL;
    dictionary *inip = NULL;
    int         i,s,j,n;
    char        **ptr;
    char        *keys;
    char        *str;

    inip = iniparser_load(PATH);
    if(!inip)
    {
        printf("iniparser_load failure\n");
        return -1;
    }

    n = iniparser_getnsec(inip);
    if(n)
    {
        for(i = 0; i < n; i++)
        {
            printf("%s\n",iniparser_getsecname(inip,i));
             s= iniparser_getsecnkeys(inip,iniparser_getsecname(inip,i));
             keys[s];
             str = iniparser_getsecname(inip,i);
             iniparser_getseckeys(inip,str,keys);
             ptr = keys;
            for(j = 0; j < s; j++)
            {
                printf("%s\n",*ptr);
                ptr++;
            }
        }
    }
    else
    {
        printf("This file has no section!\n");
        return -1;
    }

    iniparser_set(inip,"ipaddrpool:start","192");
    iniparser_set(inip,"ipaddrpool:end","198");
    iniparser_unset(inip,"opt:dns1");

    fp1 = fopen(PATH,"w");
    iniparser_dump_ini(inip,fp1);
    iniparser_freedict(inip);

    fclose(fp1);

    return 0;
}

Original: https://www.cnblogs.com/Ye-Wei/p/16728606.html
Author: 西故黄鹤楼
Title: 【MQTT】iniparser库的安装和使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/606324/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • nginx-add_header指令

    介绍 前端子系统由于业务形态,会有各种相同根域名的子系统相互调用,这时候就需要相应的子系统在nginx上支持跨域配置。 业务使用的样例 add_header ‘Access-Con…

    Linux 2023年6月6日
    0110
  • Centos 7.x 线上安装 Kubernetes

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 安装依赖包 yum install -y conntrack ntpdate ntp ipvsadm ipset jq ipta…

    Linux 2023年5月27日
    0128
  • 聊聊Mysql主从同步读写分离配置实现

    Hi,各位热爱技术的小伙伴您们好,好久没有写点东西了,今天写点关于mysql主从同步配置的操作日志同大家一起分享。最近自己在全新搭建一个mysql主从同步读写分离数据库简单集群,我…

    Linux 2023年6月14日
    098
  • Question09-查询学过编号为”01″并且也学过编号为”02″的课程的同学的信息

    * — 学过01,且学过02 — 学过01 SELECT sc.SID FROM SC sc WHERE sc.CID = ’01’; — 学过02 SELECT sc.SI…

    Linux 2023年6月7日
    094
  • CSRankings: Computer Science Rankings

    CSRankings is a metrics-based ranking of top computer science institutions around the worl…

    Linux 2023年6月13日
    0125
  • 【XML】学习笔记第三章-namesapce

    命名空间概述 标记中出现了同名不同义的情况,极其容易造成含义混乱。命名空间就是由W3C制定的用于解决这类问题的。 【命名空间的作用】出现标记同名不同义情况时,避免含义混乱 XML技…

    Linux 2023年6月14日
    087
  • Flask的环境配置

    from flask import Flask​ 通过专门的配置文件,读取配置项,适用于配置项较多 settings.py class Config(object):    DEB…

    Linux 2023年6月8日
    0105
  • ​探秘 Web 水印技术

    Web 水印技术在信息安全和版权保护等领域有着广泛的应用,对防止信息泄露或知识产品被侵犯有重要意义。水印根据可见性可分为可见水印和不可见水印(盲水印),本文将分别予以介绍,带你探秘…

    Linux 2023年6月8日
    0119
  • [20211105]索引分裂 块清除 日志增加.txt

    [20211105]索引分裂 块清除 日志增加.txt –//题目起的有点怪,只是我昨天在测试时遇到的怪问题,我通过测试环境演示出来。–//当非主键索引发生…

    Linux 2023年6月13日
    097
  • 趣谈IO多路复用的本质

    在《轻松搞懂5种IO模型》中,我发起了一个投票。 答案是【同步IO多路复用】。目前,60%的朋友答对了。原因这里解释一下。 同步和异步的概念区别 同步:线程自己去获取结果。(一个线…

    Linux 2023年6月14日
    0107
  • MySQL之变量

    mysql变量分类: 系统变量:系统自带的变量 状态变量:用于设置或保存系统的运行状态 用户自定义变量:用户自定义的变量 系统变量 使用@@标识一个系统变量,系统变量分为全局(gl…

    Linux 2023年6月7日
    0119
  • Java秒杀系统一:环境搭建和DAO层设计

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月11日
    0126
  • 致远 OA 组合 getshell

    测试版本为: 致远 A8-V5 协同管理软件 V6.1SP2 1.&#x83B7;&#x53D6;cookie&#x4FE1;&#x606F; 2….

    Linux 2023年5月28日
    0318
  • 数字证书编码ASN.1

    任务详情 参考附件中图书p223 中13.2的实验指导,完成DER编码 序列号=1174(0x0496),证书签发者 DN=”CN=Virtual CA,C=CN&#8…

    Linux 2023年6月8日
    060
  • Linux Centos 打开和关闭防火墙

    systemctl status firewalld.service # 查看防火墙状态 systemctl start firewalld.service # 开启防火墙 sys…

    Linux 2023年6月13日
    0118
  • 良许跌宕起伏的2021年

    大家好。我叫梁旭,以前是农民,现在是企业家。 [En] Hello, everyone. I’m Liangxu, a former farmer, and now a…

    Linux 2023年5月27日
    0121
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球