我正在尝试理解如何创建一个包含一堆参数的“.config”文件,以便以后用于在Unix上的C项目中设置变量。
我使用sudo nano test.config
创建了我的“.config”文件,并写了一些内容,例如:
#N is this
N 10
#p is that
p 0.002
#T is this
T 10
既然我已经这样做了,我如何阅读其内容并使用它来初始化我的变量?
答案 0 :(得分:0)
this问题的几个答案解释了如何解析该配置文件,但您可以使用标准parsing技术(可能是您自己的recursive descent parser)或Glib的lexical scanning或key-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)获取该文件路径(但您可能应该坚持snprintf
或asprintf
getenv("HOME")
...)。
您可以考虑在程序中嵌入一些可编写脚本的解释器,如lua或guile(但这是一个强大的架构设计决策)。然后配置文件变成了一些(Turing-complete!)脚本。
顺便说一句,没有必要使用sudo
来编辑该配置文件(在您的主目录下),您可能还决定在/etc/
下阅读一些系统范围的配置