unix程序中的配置位置

unix程序中的配置位置,unix,Unix,我想写一个unix/linux程序,它将使用一个配置文件 我的问题是,我应该把文件的位置放在哪里 我可以将位置(如/etc)硬编码到程序本身中 但是,如果没有权限的用户可以(通过make)在其他地方安装它,比如~,我会喜欢它 makefile是否应该编辑源代码?或者它通常是以不同的方式完成的?创建一些默认值: /etc/appname ~/.appname 然后,如果要允许覆盖这些变量,请让应用程序检查环境变量。e、 g $app\u userconfig $app\u config 将

我想写一个unix/linux程序,它将使用一个配置文件

我的问题是,我应该把文件的位置放在哪里

我可以将位置(如
/etc
)硬编码到程序本身中

但是,如果没有权限的用户可以(通过make)在其他地方安装它,比如
~
,我会喜欢它

makefile是否应该编辑源代码?或者它通常是以不同的方式完成的?

创建一些默认值:

  • /etc/appname
  • ~/.appname
然后,如果要允许覆盖这些变量,请让应用程序检查环境变量。e、 g

  • $app\u userconfig
  • $app\u config
将包含覆盖路径/文件名

最后添加一个命令行选项,允许在运行时指定配置,例如

  • -c |--config{filename}

正如斯卡夫曼所说,配置文件之类的规范位置在FHS中指定。似乎有一种约定,即程序将从运行它的目录中读取配置文件,作为硬编码位置的配置文件的替代。您可能希望考虑添加一个命令行开关,允许用户指定另一个配置文件位置。

在/ETC/PRGNAME下保存全局配置文件是一个标准。另外,允许单个用户使用一个覆盖全局设置的.local config文件将允许每个用户根据自己的喜好对程序进行个性化设置。

生成文件不应直接修改源代码,但它可以通过
-D
选项将文件夹路径/名称传递给编译器。处理这个问题的一种方法是#定义像DEFAULT#PATH这样的东西作为默认安装路径。如果用户想要定义路径,makefile会将
-DUSER\u path=which
添加到编译器选项中。如果用户路径存在,则编写代码以使用该路径,否则使用默认路径。

通常使用一系列位置来获取位置:

  • 由用户作为命令行参数提供(即
    /program-C path/to/config/file.cfg
  • 从环境变量(
    char*path_to_config=getenv(“PROGRAMCONFIG”);
  • 可能会查找特定于用户的或本地版本(
    stat(“./program.cfg”)
    或建立一个strig来指定“$HOME/.program/config.cfg”或“$HOME/.program.cfg”和
    stat
    that)
  • 硬编码为备份(
    stat(“/etc/program/config.cfg”,…)

  • 根据惯例,请参阅文件系统层次结构标准()以获取有关内容应该放在哪里的指导。