页面加载中,请稍候
来源:嵌入式系统发布时间:2022-05-103161浏览
询问 AI对于嵌入式开发,INI 文件使用门槛低、用途广,掌握一个稳定的开源 INI 解析器可以提升编码效率、避免重复造轮子。
另外,对于 C语言 初学者,MinIni 代码严谨且健壮,API设计合理,非常适合用来练习文本读写、字符串操作的开源项目。
https://github.com/compuphase/minIni
minIni 是一个用于读取和写入 INI 文件的库。
什么是 INI 文件?
INI 是一种有简单语法的纯文本文件,例如:
[Network]
hostname=embedded-system
address=dhcp
dns=192.168.1.1
timeout=10
[Network] 是一个 Section,Section 下面有多个键值对。
INI 文件的特点是简单易用、可读性好。
Linux 系统 etc 目录下的许多配置文件都是 INI 文件,只是有的配置文件没有显式声明 Section。
例如 bluez 的配置文件 /etc/bluetooth/main.conf:
[General]
# Default adaper name
Name = BlueZ
[Policy]
# AutoEnable defines option to enable all controllers when they are found.
AutoEnable=true
minIni 的特点:
1、大约是 950 行代码 (包括注释),是一个真正的 “迷你” INI 文件解析器,非常容易移植到各种嵌入式平台。
2、不需要标准 C/C++ 库中的 文件 I/O 函数,且允许通过宏配置选择文件 I/O 接口。
3、仅使用 stack ,完全不使用动态内存(malloc)。
4、有 C++ binding, 能很好地配合 C++ 使用。
minIni 的核心源码就一个 .c 和 .h 文件,直接将它们集成到项目代码里即可。
快速地了解它的 API:
#include "minIni.h"
#define sizearray(a) (sizeof(a) / sizeof((a)[0]))
const char inifile[] = "example.ini";
int main(void)
{
char str[100];
char section[50];
long n;
n = ini_gets("Network", "address", "dummy", str, sizearray(str), inifile);
if (n >= 0) printf("Network/address=%s", str);
n = ini_getl("Network", "timeout", -1, inifile);
printf("Network/timeout=%ld\n", n);
待解析的文件内容:
[Network]
hostname=embedded-system
address=dhcp
dns=192.168.1.1
timeout=10
运行结果:
Network/address=dhcp
Network/timeout=10
ini_gets() 用于获取字符串类型的值。
参数 1 是 Section name;
参数 2 是 Key name;
参数 3 是获取不到值时的默认值;
参数 4 是用于保存目标键值的 Buffer;
参数 5 是 Buffer 的长度;
参数 6 是 INI 文件的路径;
ini_getl() 用于获取整型类型的值,参数的含义和 ini_gets() 大同小异。
完整的 API 列表:

实现解析 INI 文件的功能并不难,难的是要认真考虑各种边界情况和异常情况,保证程序的健壮性和 API 的合理性。
以 ini_gets() 为例:

就是先打开文件,然后用 getkeystring() 找到目标键值,最后拷贝给调用者。
getkeystring() 负责真正地解析文本:
大约有 80 行代码,处理流程:
1、用 fgets 进行逐行读取,用 strrchr 找到包含 '[' 和 ']' 的行,然后再用 strncasecmp/strnicmp 找到目标 Secntion 所在的行。
2、继续用 fgets 进行逐行读取,用 strrchr 找到包含 '=' 的行,然后再用 strncasecmp/strnicmp 找到目标 Key 所在的行。
3、用 strncpy 将目标 Key 的值拷贝给调用者。
虽然解析文本只需要做到这 3 个步骤,但是由于需要对各种边界情况进行判断,以及处理空格之类的无效字符,需要细心且反复调试才能编好这个函数。
<总结>
对于嵌入式系统开发,INI 配置文件使用广泛,一个稳定的 INI 解析器可以提升编码效率;而且MinIni 开源代码,也是很好的参考学习项目。
更多信息和开发技巧,请关注微信公众号“嵌入式系统”
新闻来源:嵌入式系统,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。
暂无评论哦,快来评论一下吧!

2026-07-20

2026-07-17

2026-07-20