Linux C代码如何找到conf文件(通常在/ etc中)

Lin*_*bie 4 c linux project

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

但是从源代码的角度来看,源代码/etc在解析时如何知道conf文件.我的意思是代码就像fopen("/../../app.conf", "r");在我们安装之前确定的那样,配置文件会改变源代码还是存在其他一些机制?

sar*_*old 5

configure脚本将生成必要的Makefile,它将使用C编译器的-DMACRO=content功能基本上将C预处理程序#define MACRO content语句注入编译单元.因此,sysconfdir可以通过Make规则使用:

foo.o: foo.c
        $(CC) -DCONFDIR=$(sysconfdir) -o $@ $<
Run Code Online (Sandbox Code Playgroud)

(这表示foo.ofoo.c更新时构建目标文件;要构建它,使用$(CC)变量运行C编译器,CONFDIR使用$(sysconfdir)(通过./configure脚本提供)的内容定义,将输出放入目标文件($@)并提供源文件($<)作为编译器的唯一输入.))

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

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

注意在编译程序之前执行C 字符串连接 - 超级方便了这种用法.

更多细节:http://www.gnu.org/software/hello/manual/autoconf/Installation-Directory-Variables.html#Installation-Directory-Variables