在Linux上使用C语言读取INI文件

26

有没有一种标准的方法,可以使用C语言在Linux上读取类似于INI文件的配置文件?

我正在为基于Linux的手持设备编写C代码。

否则,我想了解其他替代方案。

最终更新:

我已经探索并使用了LibConfig。但是它的占用空间很大,而我的使用过于简单。因此,为了减小占用空间,我自己实现了一个版本。该实现并不太通用,实际上相当耦合。配置文件在启动应用程序时仅被解析一次,并设置为一些全局变量。


绝对支持询问应该采取的方法,而不是自己动手去做 #74632! - DevSolar
@DevSolar,开个玩笑,相比做更有成效的事情,编写自己的解析器总是一件好事!(咧着嘴) - Tim Post
1
如果您想要一个选项列表,您应该编辑您的问题以表明。现在,正确的答案是“不,没有标准方法” :) - gnud
我终于为自己打了一个。 - Kangkan
我已经探索并使用了LibConfig。但是它的占用空间很大,而我的使用方式又太简单了。因此,为了减少占用空间,我推出了自己的实现。这个实现并不是太通用,事实上现在相当耦合。配置文件在启动应用程序时只被解析一次,并设置为一些全局变量。 - Kangkan
显示剩余2条评论
7个回答

16

试试libconfig吧:

Libconfig是一个简单的库,用于处理结构化的配置文件,例如这个:test.cfg。这种文件格式比XML更紧凑、更易读。并且与XML不同,它具有类型感知能力,因此在应用程序代码中无需进行字符串解析。

Libconfig非常紧凑——只占用了expat XML解析器库的一小部分大小。这使其非常适合内存受限的系统,例如手持设备。

该库包括C和C++语言的绑定。它适用于符合POSIX标准的UNIX和类UNIX系统(GNU / Linux、Mac OS X、Solaris、FreeBSD)、Android和Windows(2000、XP及更高版本)...


1
看起来libconfig是正确的选择,因为它简单易用且体积小。非常感谢。 - Kangkan
libconfig 看起来不错,但它对于闭源项目有毒的 GNU 许可证。 - jww

12

很抱歉,没有一种标准的方法。这可能是最精确的答案 :)

你可以查看这个Linux配置文件库列表,也许会有帮助。


4
有趣的是,原帖要求一个“标准”方法,却得到了7个“不同”的建议(全部都被点赞了),而那个说没有“标准”方法的答案却被踩了。 - SF.
1
在编辑之前,回答只是简单地说“不”,没有提供任何可用选项的提示。这就是为什么我给了它-1的原因,因为这几乎和在Windows上按F1键一样没用。现在,有了选项列表,这是一个好的答案,这就是为什么我撤销了投票的原因。 - DevSolar
我意识到,也许尽管问题要求一种标准方式,但作者真正想要的是一些不同的选择。但那并不是他在问什么,因此最初的回答是否定的。 - gnud
@gnud:虽然我询问了任何标准方法,但意图是要了解解决问题的方法。我明白问题应该以这样的方式提出,以便获得其他答案。我正在更新问题。非常感谢。 - Kangkan

11

不用管#1(Iniparser)。那是我见过的最糟糕的实现。 - Andy

7
如果您能使用(在任何基于C的应用程序中都很优秀)glib,它有一个适用于.ini风格文件的key-value file parser。当然,您还可以免费访问glib中各种非常好的数据结构。

4
如果您需要一个快速且小的代码仅用于读取配置文件,我建议使用inih。它仅加载配置文件内容一次,解析内容并为每个键/值对调用回调函数。非常小巧,也适用于嵌入式系统。

4

有一个更新的iniparser分支,位于ccan,原始作者多年来一直无法给予它太多关注。免责声明-我是它的维护者。

此外,iniparser包含一个非常有用的字典。


2

我很不想建议完全不同的东西,但是在建议XML时,libexpat非常简单,但可以处理XML。

我得出这个结论是因为我有与你相同的问题,但后来我意识到该项目已经链接了libexpat - 我应该只使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接