4

我是在 Linux 上部署用 C/C++ 编写的程序的新手,我想知道在这种情况下你会做什么。

我有一个二进制文件(用 GNU Make 编译)需要读取配置文件(例如myprogram.conf)。但是当我编写一个 Makefile 来部署这个文件时/usr/bin/,配置文件应该放在哪里?可执行文件如何知道它在哪里?

4

4 回答 4

8

你有无穷无尽的选择,但最好的方法取决于几件事。首先,它是特定于用户的配置文件,还是对所有用户都是全局的?

如果它是特定于用户的,例如,您可以将其保存在 ~/.myprogram/config.file 中并让程序在那里检查。作为为您的用户提供的服务,由您决定如果没有找到该怎么做——也许从其他地方复制一个默认配置,或者生成一个默认配置,或者使用硬编码的默认选项,或者显示一个配置向导,或者只是失败。这完全取决于你。

如果它是全局的,那么在 Linux 上放置它的传统位置是在 /etc 中,例如 /etc/config.file 或 /etc/myprogram/config.file。请参阅Linux 文件系统结构。在 Linux 上,您通常总是有一个 /etc。处理文件不存在的情况与上述相同 - 没有“正确”的方法来处理它,它纯粹基于您希望为用户提供的便利程度。

我通常对全局配置文件做的是在安装时将它们放在 /etc/wherever 中,让程序默认从 /etc/wherever 加载配置文件,但还提供一个命令行选项来覆盖配置文件(对于测试或其他情况)。

我通常如何处理丢失的配置文件完全取决于应用程序。我通常要么有硬编码的默认值(如果合适的话),要么干脆失败并将用户引导到一些描述配置文件的文档(我发现在我的安装程序安装配置文件的情况下就足够了)。

希望有帮助。

于 2013-08-02T23:05:38.203 回答
2

这取决于配置参数是什么,以及它们是“每个系统”、“每个用户”、“每个组”还是......

系统配置通常存在于/etc/.... 在程序所在的同一目录中也是一个非常好的地方。

用户配置,在用户的主目录中。

组配置是最棘手的,因为您可能需要提出一个方案,其中每个“组”都有一个配置文件。/etc/myprog/groups/<groupname>/config或类似的东西会起作用。

于 2013-08-02T23:06:28.190 回答
2

在 Linux 上,配置文件的通常位置是“/etc”,因此可以接受部署类似/etc/myprog.conf. 但是,这需要root权限。其他不错的选择包括将配置文件放在用户的主目录中,使其类似于~/.myprog.conf~/.myprog/.conf使用文件夹,您可以在其中拥有多个配置文件、缓存或其他您想要的东西。

至于可执行文件如何知道文件在哪里,一种解决方案是在几个常见位置查找文件。例如,如果您决定将配置放在用户的主目录中,请先在那里查找,如果找不到,请在/etc. 并允许一个特殊的命令行参数来加载不同的配置文件。因此,比如说,调用myprog可以检查主文件夹中的配置文件,但myprog -c /some/path/config/some/path/config用作文件。如果任何地方都没有有效的配置文件,那么拥有一些可以回退的默认设置也是一个好主意。

于 2013-08-02T23:08:35.390 回答
0

配置文件可以放在任何地方,但我会尝试将它放在与程序将读取或写入的任何其他文件相同的目录中。

至于可执行文件如何找到它,我会在命令行上将配置文件的路径作为参数传递给可执行文件,默认值为“。” (这是当前目录,即您在启动可执行文件时所在的目录)。

于 2013-08-02T22:59:46.547 回答