首页 > 其他分享 >iniparser配置文件

iniparser配置文件

时间:2024-04-18 15:35:17浏览次数:29  
标签:配置文件 dictionary section iniparser char ini key

介绍

程序没有任何配置文件,那么它对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,为了让程序出厂后还能根据需要进行必要的配置,所以要用配置文件。

下载

下载地址: https://gitcode.com/ndevilla/iniparser.git

#解压缩

cd iniparser

make

#将dictionary.c,dictionary.h,iniparser.c,iniparser.h,libiniparser.a,libiniparser.so.1复制到相应的目录下,编译链接时使用

格式

;section注释
[setion1]
key11 = value11 
key12 = value12 

[setion2]
key21 = value21 
key22 = value22
...

  • ini文件的最基本组成单元就是key或者叫property,每个key都有一个名称(name)和对应的值(value)。

  • 多个Key归类为一组,即section。组名定义要独立一行,并用中括号括起来。

  • 在section声明下的keys都会和该section关联起来。一个section的作用域会在下一个section声明的地方结束。

  • section不可以嵌套。定位一个key是用section:key来表示的,所以每个组下的key是唯一的不能重复的,但不同组下可以存在相同key。

  • section 和 key 大小写无关,写入的字符串全部小写化,取出的字符串也全部小写化。

  • 注释以分号;开头

常用库函数

dictionary * iniparser_load(const char * ininame);  
功能:
    加载ini文件,将数据存于dictionary结构中
char * iniparser_getstring(dictionary * d, const char * key, char * def);   
功能:
    获取对应key的value(iniparser_getint,iniparser_getdouble, iniparser_getboolean 类似)
返回值:
	返回dictionary对象的section:key对应的字串值,若未找到对应的key则返回def 的内容。
int iniparser_getnsec(dictionary * d);  
功能:
	获取dictionary对象的section个数
    
    
char * iniparser_getsecname(dictionary * d, int n); 
功能:
	获取dictionary对象的第n个section的名字
int iniparser_set(dictionary * ini, const char * entry, const char * val);  
功能:
	设置dictionary对象的某个section:key的值,entry是键值,val是待设置的新值。
返回值:
    设置成功返回0,否则-1。
        
        
void iniparser_unset(dictionary * ini, const char * entry);
功能:
	删除dictionary对象中某个section:key
返回值:
    设置成功返回0,否则-1。        
void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f); 
功能:
    dictionary中对应组的数据写入一个已打开的文件中。s是组名,f是文件流。
    
void iniparser_dump_ini(dictionary * d, FILE * f); 
功能:
    保存dictionary对象到文件
void iniparser_freedict(dictionary * d);    
功能:
    释放dictionary对象(内存)

示例

[server]
hostname        = iot-06z00jezfxayfvn.mqtt.iothub.aliyuncs.com
port            = 1883

[user_passwd]
username        = DS18B20&k11n1ktsKW9

[ID]
clientId        = k11n1ktsKW9.DS18B20|securemode=2,signmethod=hmacsha256,timestamp=1712143691890|

[pub_topic]
topic           = /sys/k11n1ktsKW9/DS18B20/thing/event/property/post

[json]
method          = thing.event.property.post
id              = 12345
identifier      = Temperature
version         = 1.0.0

[keepalive]
keepalive       = 60

[qos]
qos             = 0
dictionary      *ini = NULL;

const char      *clientId;
const char      *username;


ini = iniparser_load(ini_path);
if( ini == NULL )
{
    log_error("iniparser_load() failure\n");
    return -1;
}

clientId = iniparser_getstring(ini, "ID:clientId", DEF_CLIENTID);//DEF_CLIENTID在头文件中定义
username = iniparser_getstring(ini, "user_passwd:username", DEF_USERNAME);

strncpy(mqtt->clientId, clientId, BUF_SIZE);
strncpy(mqtt->username, username, BUF_SIZE);
        
iniparser_freedict(ini);

标签:配置文件,dictionary,section,iniparser,char,ini,key
From: https://www.cnblogs.com/LiBlog--/p/18143604

相关文章

  • 2024-04-18 Umi配置文件简读
    Umi配置文件通常为.umirc.js或者config/config.js,这两个文件的作用是相同的,两个文件都存在时会优先加载`.umirc.js`,请只使用其中一个来作为配置项!以下是其常见配置项:plugins:配置插件列表。exportdefault{plugins:[['umi-plugin-react',{dva:true,antd:true......
  • mysql5.7配置文件
    datadir=/data/mysqlsocket=/var/lib/mysql/mysql.sockDisablingsymbolic-linksisrecommendedtopreventassortedsecurityriskssymbolic-links=0log-error=/data/mysql/mysqld.logpid-file=/data/mysql/mysqld/mysqld.piddefault-time-zone='+8:00'......
  • 配置文件Profile
     分别写成4个文件后缀为yml自带的是properties文件,这个文件的格式不太实用,因此将其改成yml文件  yml文件是树形目录的形式,可以更清晰的看到各个配置的结构。 在application.yml中选择要使用哪个配置环境,是dev本地环境,还是test测试环境,还是产品上线的pro环境。 ......
  • Docker mysql 配置文件读取失败 [Warning] World-writable config file '/etc/mysql/c
    这个警告表明MySQL正在忽略/etc/mysql/conf.d/my.cnf这个配置文件,因为它被设置为了全世界可写。这个警告是基于安全性的考虑。当配置文件被设置为全世界可写时,任何人都可以修改它,这可能会导致安全风险,因为恶意用户可以更改MySQL的配置,从而影响数据库的行为和安全性。为了......
  • SpringBoot使用 nacos 会默认加载项目名配置文件
    问题描述boostrap.yml配置如下spring:application:name:cnblogscloud:nacos:config:server-addr:http://ip:8848namespace:d8b0df04-aa58-4a5b-b582-7d133b9e8b2c#命名空间IDfile-extension:yamlusern......
  • android studio 清单配置文件androidmainfest.xml解读
    1、注册Activity页面,并指定首页。 所有的页面文件要在此文件中注册。指定是APP的首页:(android:exported="true")和下面的intent-filter中的两行,; 2、需要的权限要在此文件中指定;<uses-permissionandroid:name="android.permission.BLUETOOTH_SCAN"/><?xmlver......
  • docker nginx监听80端口 同一 IP 多域名配置方法--多子配置文件包含 https
    下载nginx镜像文件dockerpullnginx:1.24.0宿主机上创建nginx_80目录htmlcertconflogs创建配置文件nginx.conf一、Nginx配置文件nginx.conf操作:在http模块增加(子配置文件的路径和名称):include/etc/nginx/conf.d/*.conf;usernginx;worker_processes1;err......
  • Java从外部配置文件读取参数
    1.pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://mav......
  • Linux Shell:用户配置文件详解
    LinuxShell:用户配置文件详解在Linux系统中,用户配置文件扮演着至关重要的角色,它们定义了用户的操作环境,包括环境变量、别名、函数等。这些配置文件在用户登录时被读取和执行,以设置一个为用户量身定制的命令行环境。在这篇文章中,我们将详细介绍Linux中最常见的几种用户配置......
  • go写入配置文件
    packageinstallimport("fmt""io/ioutil""os"v2"gopkg.in/yaml.v2""github.com/fanux/sealos/net""github.com/fanux/sealos/pkg/logger")const(defaultConfigPath="......