【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)

大家都在看

  • 3-在Django中使用使用数据库

    数据库设置 在上一章节中学习了如何创建Django项目,在Django项目中创建web应用,以及如何在Django主程序的URL中引用web应用中的URL。下面来了解如何在Djan…

    Linux 2023年6月7日
    0119
  • Question08-查询没学过”张三”老师授课的同学的信息

    * SELECT * FROM Student WHERE SID NOT IN ( SELECT DISTINCT Student.SID FROM Student , SC ,…

    Linux 2023年6月7日
    0101
  • 博客怎么写才能更安全和简洁

    前言 博客实现本地存储 Markdown语法的介绍 博客对于我们普通人来说就是为了更好的去实现个人知识的一个整理融合然后把知识共享可以帮助其他去实现自己的一些工作或者学习中的一些疑…

    Linux 2023年6月14日
    095
  • PYTORCH: 60分钟 | 神经网络

    神经网络可以使用 torch.nn包构建。 现在你已经对autograd有所了解, nn依赖 autograd 定义模型并对其求微分。 nn.Module 包括层,和一个返回 ou…

    Linux 2023年6月16日
    0168
  • 使用 Active Directory PowerShell 模块收集 AD 数据

    原文:https://adsecurity.org/?p=3719 chrome默认翻译结果 Microsoft 随 Windows Server 2008 R2(和更新版本)提供…

    Linux 2023年5月28日
    0102
  • podman无根用户基本设置和使用

    在允许没有root特权的用户运行Podman之前,管理员必须安装或构建Podman并完成以下配置 cgroup V2Linux内核功能允许用户限制普通用户容器可以使用的资源,如果使…

    Linux 2023年6月13日
    091
  • TCP/UDP 编程模型

    TCP编程模型 server创建socket套接字 socket套接字–可以理解为文件描述符(file descriptor),UNIX把网络看成文件 /** * @p…

    Linux 2023年6月6日
    0110
  • centos8 安装kudu

    1、安装cmake yum install cmake -y 2、安装python yum install python39 -y 设置默认Python版本 alternative…

    Linux 2023年6月8日
    074
  • shell ${val:0:3)含义

    ${file:0:5}:提取最左边的5个字节:/dir1${file:5:5}:提取第5个字节右边的连续5个字节:/dir2 例子: pval=12345678 r=${pval:…

    Linux 2023年5月28日
    072
  • linux版的查毒工具 ClamAv 安装脚本

    /bin/bash 安装linux版的查毒工具 clamav 用root执行 保证服务器能访问外网 yum源最好是最新的 创建用户和组 groupadd clamavuseradd…

    Linux 2023年6月13日
    0109
  • LeetCode-210. 课程表 II

    题目来源 题目详情 现在你总共有 numCourses 门课需要选,记为 0 到 numCourses – 1。给你一个数组 prerequisites ,其中 prerequis…

    Linux 2023年6月7日
    091
  • 防止shell script多次运行

    防止shell script多次运行 一个思路是在script初期检测系统中是否存在同名进程。 if [ ps -ef | grep "test.sh" | g…

    Linux 2023年5月28日
    086
  • 本地项目推送到远程仓库(原来可以这么玩)

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 方式一:在idea中将项目推送至远程仓库 注:此处远程仓库以码云为例 第一步:登录码云,进入个人主页 点击个人头像…

    Linux 2023年6月14日
    0135
  • 关于Google词向量模型(googlenews-vectors-negative300.bin)的导入问题

    起因 项目中有如下代码: word2vec = KeyedVectors.load_word2vec_format(‘./GoogleNews-vectors-negative30…

    Linux 2023年6月7日
    0105
  • Linux命令1

    快捷键 1&#x3001;&#x6253;&#x5F00;&#x7EC8;&#x7AEF; ctrl+alt+t 2&#x3001;…

    Linux 2023年6月8日
    0115
  • docker:alpine使用logrotate切割日志

    最近在交付项目的时候使用了docker,大家都知道日志是项目定位问题的重要依据,但如果一开始项目本身没有对日志进行合理切割那就会导致长时间运行的项目日志文件大得编辑器打不开的情况。…

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