gpt4 book ai didi

c - Linux C代码如何找到conf文件(一般在/etc)

转载 作者:IT王子 更新时间:2023-10-29 01:11:17 25 4
gpt4 key购买 nike

我知道当我从源代码安装一个 Linux 应用程序时,我执行 ./configure --sysconfdir=/etc,然后这个应用程序的 conf 文件(例如 httpd.conf) 将转到 /etc

但是从源码来看,源码解析的时候怎么知道conf文件在/etc下。我的意思是像 fopen("/../../app.conf", "r"); 这样的代码是在我们安装之前确定的,配置文件会更改源代码还是其他一些机制存在吗?

最佳答案

configure脚本将生成必要的 Makefile这将使用 C 编译器的 -DMACRO=content本质上注入(inject) C 预处理器的功能 #define MACRO content语句进入编译单元。所以,sysconfdir可以通过 Make 规则使用:

foo.o: foo.c
$(CC) -DCONFDIR=$(sysconfdir) -o $@ $<

(意思是当 foo.o 更新时构建 foo.c 目标文件;要构建它,使用 $(CC) 变量运行 C 编译器,用 CONFDIR 的内容定义 $(sysconfdir)(已提供通过 ./configure 脚本),将输出放入目标文件($@)并将源文件($<)作为编译器的单独输入。))

然后是foo.c中的C代码可以这样使用它:

 FILE *conf;
if (conf = fopen(CONFDIR "/foo", "r")) {
/* read config file */
} else {
/* unable to open config, either error and die or supply defaults */
}

注意 C string concatenation在编译程序之前执行——对于这种使用来说非常方便。

此处有更多详细信息:http://www.gnu.org/software/hello/manual/autoconf/Installation-Directory-Variables.html#Installation-Directory-Variables

关于c - Linux C代码如何找到conf文件(一般在/etc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5055934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com