在Unix/Linux中编程配置数据

Ale*_*x F 7 c++ unix linux configuration-files

在Unix/Linux中保留用户配置数据的推荐方法是什么?我的编程语言是C++.配置数据将以XML /文本/二进制格式保存,我对处理此类文件没有任何问题.我想知道我在哪里可以保留它们.例如,在Windows OS配置中,数据可以保存在Registry(旧方式)或用户应用程序数据目录中.Linux怎么样?我需要对配置文件的读/写访问权限.

wal*_*lyk 9

注册表的概念是Windows特有的,微软曾经承认它是错误的构思(参见这个,这个,这个,这个(见#2),这个).

在Unix和Linux中,系统范围程序的配置在/ etc中,或者可能是特定于应用程序的子目录.

每个用户配置数据以隐藏的文件输入文本格式保存在用户的主目录中,或者保存在用户主目录中的特定于应用程序的隐藏目录中.引用主目录的正确方法是通过环境变量HOME.通过创建.名称的第一个字符来创建隐藏文件和目录.

系统范围配置的示例是/etc/wgetrc/etc/ssh/.每用户数据的示例是$HOME/.bashrc$HOME/.mozilla/.

  • 您不应该依赖环境变量HOME.既然我们正在谈论可以进行系统调用的C++,你应该做`struct passwd*pw = getpwuid(getuid());`(或者`getpwuid_r`如果你需要线程安全)然后使用`pw->的值pw_dir` (2认同)
  • 实际上,我会使用`getenv("HOME")`并返回`getpwuid(getuid()) - > pw_dir`,以允许用户在需要时覆盖主目录.请参阅ergosys提到的XDG basedir规范:它允许用户覆盖几乎所有内容. (2认同)