介绍
程序没有任何配置文件,那么它对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,为了让程序出厂后还能根据需要进行必要的配置,所以要用配置文件。
下载
下载地址: 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