下面部分内容引用来自
常见的配置文件有三种类型:.INI,JSON,LUR
一 INI介绍与使用:
.ini 文件是 Initialization File
的缩写,即初始化文件。INI文件由节、键、值组成,注解使用分号表示(;)。例如:
INI文件可以借助inih解析器来对其进行解析。用法是将其下载解压后的ini.c
与 ini.h
放到我们的工程下,用以下示例来将配置文件Ini中的内容读出来给我们的工程来用
1 // 微信公众号:嵌入式大杂烩 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #include "ini.h" 6 7 typedef struct 8 { 9 const char* ip_addr; 10 const char* name; 11 int num; 12 } configuration; 13 14 static int handler(void* user, const char* section, const char* name, 15 const char* value) 16 { 17 configuration* pconfig = (configuration*)user; 18 19 #define MATCH(s, n) strcmp(section, s) == 0 && strcmp(name, n) == 0 20 if (MATCH("ip", "ip_addr")) 21 { 22 pconfig->ip_addr = strdup(value); 23 } 24 else if (MATCH("test", "name")) 25 { 26 pconfig->name = strdup(value); 27 } 28 else if (MATCH("test", "num")) 29 { 30 pconfig->num = atoi(value); 31 } 32 else 33 { 34 return 0; /* unknown section/name, error */ 35 } 36 37 return 1; 38 } 39 40 int main(int argc, char* argv[]) 41 { 42 configuration config; 43 config.ip_addr = NULL; /* set defaults */ 44 config.name = NULL; 45 config.num = 0; 46 47 if (ini_parse("ip.ini", handler, &config) < 0) 48 { 49 printf("Can't load 'ip.ini'\n"); 50 return 1; 51 } 52 printf("Config loaded from 'ip.ini': ip_addr = %s, name = %s, num = %d\n", 53 config.ip_addr, config.name, config.num); 54 55 if (config.ip_addr) 56 free((void*)config.ip_addr); 57 if (config.name) 58 free((void*)config.name); 59 60 return 0; 61 }
二 JSON:
JSON(JavaScript Object Notation)
是一种轻量级的数据交换格式,实际就是KV键值对组成的字符串,有带空格和不带空格格式:前者在打印输出时使用,直观清晰,当然如果结构复杂,还需要借助在线树形数据分析工具,但是比较浪费存储空间,网络传输时效率不高;不带空格的此时优势就体现出来了,效率高占用存储小。
JSON简单的组包和解包可以用C语言的字符串库函数就可以,复杂的要考CJSON,有完整的组包解包函数。示例:例说嵌入式实用知识之JSON数据。
既然JSON可以作为配置文件,就是以JSON格式写成的文本文件如txt,以某种形式(ftp或者U盘,Ymode文件传输)给嵌入式设备,嵌入式设备读文件到字符串存储缓冲区,然后用解包函数从该存储中解析出变量(字符串,整数)然后给嵌入式程序中的结构体变量,从而起到配置作用;对于嵌入式设备通过网络向外传输时是个反过程,即将变量的值打包成json格式不带空格的字符串,然后调用网络发送出去