linux中C的配置文件

2024-09-22 16:35:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个可执行文件,运行时应该从脚本文件中获取配置参数。这样我就不需要为每次配置更改重新编译代码。现在我在一个.h文件中有所有的配置值。每次我修改它我都需要重新编译。在

Linux下的平台是C,gcc。在

这个问题的最佳解决方案是什么?我在google上查了一下XML,phthon和Lua的C绑定。使用单独的脚本语言是最好的方法吗?如果是的话,你会推荐哪一款适合我的?在

附录: 如果我想在脚本文件中镜像数据结构呢?例如,如果我有一个结构数组,是否有一个简单的方法来存储和加载它?在

谢谢


Tags: 文件方法代码脚本可执行文件参数linuxgoogle
3条回答

签出CCANciniparser。它是the original iniparser(不再维护)的分支,这使得解析INI样式的配置文件变得容易。在

示例中的代码(几乎被单元测试所镜像):

#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;
}

当然,您只需删除树中所需的几个文件,#include "iniparser.h",除非您想运行单元测试,否则与其他CCAN模块没有依赖关系。在

示例配置可能如下所示:

^{pr2}$

获取stooges:shemp的值将生成一个静态分配的questionable,您可以按原样使用(不需要修改)或分配并复制(即strdup())。没什么比这容易的了。用一个简单的互斥体及其线程安全包装对字典的访问。在

CCAN是一个综合性的C档案网络。想想CPAN,只要C。这是一个项目Rusty Russell前一段时间开始,终于获得一些牵引力。在

免责声明:我维护模块。在

我推荐Lua。它是为配置而设计的。在

最简单的方法是使用包含以下内容的文本文件:

key = value
key2 = anothervalue
....
keyn = etc

然后打开这个文件并解析它,将所有内容放入hashmap/dictionary之类的东西中。在

在google上快速搜索会找到一个库(libConfuse),可以为您完成这项工作。在

相关问题 更多 >