C unix中的文件配置,创建和使用

时间:2018-05-16 14:25:26

标签: c unix config

我正在尝试理解如何创建一个包含一堆参数的“.config”文件,以便以后用于在Unix上的C项目中设置变量。

我使用sudo nano test.config创建了我的“.config”文件,并写了一些内容,例如:

#N is this
N 10
#p is that
p 0.002
#T is this
T 10

既然我已经这样做了,我如何阅读其内容并使用它来初始化我的变量?

1 个答案:

答案 0 :(得分:0)

this问题的几个答案解释了如何解析该配置文件,但您可以使用标准parsing技术(可能是您自己的recursive descent parser)或Glib的lexical scanningkey-value pair parser(或使用别的东西)。您当然应该定义和文档(可能使用EBNF)该文本配置文件的format是什么(以及那里表示的各种条目:例如,如果该配置file指的是其他文件,如何处理这些文件路径中的空格等....)。一个常见的(但不是通用的)约定是作为注释考虑,因此跳过以#开头的任何行。

另一个问题是如何在任意working directory中运行时获取该配置文件。您只需要构建文件的绝对路径(fopen(3)open(2)),例如与

char configpath[100];
snprintf(configpath, sizeof(configpath), "%s/.test.config", getenv("HOME"));

您可以在getenv("HOME")不是NULL之前进行测试,但实际上非常不太可能;见environ(7)getenv(3);并且它提供非常长的文件路径的情况也不太可能;您可以测试snprintf(3)返回的计数小于sizeof(configpath)或使用asprintf(3)

您可以使用其他功能,例如glob(3)wordexp(3)获取该文件路径(但您可能应该坚持snprintfasprintf getenv("HOME") ...)。

您可以考虑在程序中嵌入一些可编写脚本的解释器,如luaguile(但这是一个强大的架构设计决策)。然后配置文件变成了一些(Turing-complete!)脚本。

顺便说一句,没有必要使用sudo来编辑该配置文件(在您的主目录下),您可能还决定在/etc/下阅读一些系统范围的配置