unix程序中的配置位置

时间:2010-09-05 21:56:50

标签: unix

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

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

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

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

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

5 个答案:

答案 0 :(得分:6)

创建一些默认值:

  • /etc/appname
  • ~/.appname

然后,如果要允许覆盖这些,请让应用程序检查环境变量。例如

  • $app_userconfig
  • $app_config

其中包含覆盖路径/文件名。

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

  • -c | --config {filename}

答案 1 :(得分:1)

将/ etc / prgname下的全局配置文件保留为标准。同时允许个人用户的.local配置文件覆盖全局设置将允许每个用户根据自己的喜好个性化程序。

答案 2 :(得分:1)

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

  1. 由用户提供为命令行参数(即./program -C path/to/config/file.cfg)。
  2. 来自环境变量(char *path_to_config = getenv("PROGRAMCONFIG");)。
  3. 可能会查找用户特定版本或本地版本(stat("./program.cfg")或构建一个strig来指定“$ HOME / .program / config.cfg”或“$ HOME / .program.cfg”和{{ 1}}那个。。
  4. 硬编码为备份(stat)。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

makefile不应直接修改源,但可以通过-D选项将文件夹路径/名称传递给编译器。处理它的一种方法是将DEFAULT_PATH之类的#define作为默认安装路径。如果用户想要定义路径,则makefile会将-DUSER_PATH=whatever添加到编译器选项中。您可以编写代码以使用USER_PATH(如果存在),否则使用DEFAULT_PATH。