<p>签出<a href="http://ccan.ozlabs.org" rel="nofollow noreferrer">CCAN</a><a href="http://ccan.ozlabs.org/info/ciniparser.html" rel="nofollow noreferrer">ciniparser</a>。它是<a href="http://ndevilla.free.fr/iniparser/" rel="nofollow noreferrer">the original iniparser</a>(不再维护)的分支,这使得解析INI样式的配置文件变得容易。在</p>
<p>示例中的代码(几乎被单元测试所镜像):</p>
<pre><code>#include <stdio.h>
#include <stdbool.h>
#include <ccan/ciniparser/ciniparser.h>
#define CONFIG_FILE "/etc/config.ini"
int main(int argc, char *argv[])
{
dictionary *d;
char *val1;
bool val2;
double val3;
int val4;
d = ciniparser_load(CONFIG_FILE);
if (d == NULL)
return 1;
val1 = ciniparser_getstring(d, "daemon:pidfile", NULL);
val2 = ciniparser_getboolean(d, "daemon:debug", false);
val3 = ciniparser_getdouble(d, "daemon:maxload", 3.5);
val4 = ciniparser_getint(d, "daemon:maxchild", 5);
ciniparser_freedict(d);
return 0;
}
</code></pre>
<p>当然,您只需删除树中所需的几个文件,<code>#include "iniparser.h"</code>,除非您想运行单元测试,否则与其他CCAN模块没有依赖关系。在</p>
<p>示例配置可能如下所示:</p>
^{pr2}$
<p>获取<code>stooges:shemp</code>的值将生成一个静态分配的<code>questionable</code>,您可以按原样使用(不需要修改)或分配并复制(即<code>strdup()</code>)。没什么比这容易的了。用一个简单的互斥体及其线程安全包装对字典的访问。在</p>
<p>CCAN是一个综合性的C档案网络。想想<code>CPAN</code>,只要<code>C</code>。这是一个项目<a href="http://en.wikipedia.org/wiki/Rusty_Russell" rel="nofollow noreferrer">Rusty Russell</a>前一段时间开始,终于获得一些牵引力。在</p>
<p>免责声明:我维护模块。在</p>