Vala程序如何判断当前操作系统(包括Linux情况下的具体分布)?

How to determine present operating system (including specific distribution in the case of Linux) in a Vala program?

我有兴趣编写一个 Vala 程序,它将确定当前的操作系统并相应地采取行动(具体如何行动我还没有决定,但与这个问题无关)。所以我想知道的是我如何在运行时确定 Vala 程序中的当前操作系统(包括 Linux 情况下的特定分布)。

除非您正在编写系统级代码(如程序包管理器或 OS 配置代码),否则 您不应该。更好的选择是使用已经为您抽象了分发细节的库。

如果您绝对必须这样做,有两种主要方法:

  1. 构建时

    在这里你的构建系统应该负责检测 OS / 分布并且将一个定义传递给编译器(比如 -DDISTRO_UBUNTU)或者写一个 config.vala 文件(possibly 来自模板 config.vala.in 并进行替换,例如 autotools 具有 AC_CONFIG_FILES 工具来执行此操作)。

  2. 运行时

    此处您的工具会在 运行 时自行检测。

更适合您的应用程序是一种设计选择。

至于如何操作,您可以检查几件事:

  • uname -a(或其他参数,参见 man uname)将为您提供当前 运行.

    的内核
  • lsb_release -a(并非每个发行版都可用,有时是一个可选包,您可能依赖于该包)将为您提供有关发行版和发行版的信息 运行上。

  • 在 Debian/Ubuntu 派生上有一个名为 /etc/debian_version 的文件,它指示当前安装的版本。不过,该信息并不完全准确。

  • 有些人正在尝试阅读 /etc/issue,但这很危险,因为该文件可能会被管理员/用户修改。

  • 你可以问用户 OS 她是谁 运行。

还有一些 os 信息库可供您使用。

您可以使用 uname(2) syscall (how to do that in Vala is left as an exercise to the user), or read /proc/version (see proc(5)), or read /etc/issues or follow Linux Standard Base 约定(例如 popen lsb_release -a 的输出)。

但作为 Jens Mühlenhoff 你不应该那样做,并避免编写依赖于某些特定分布的代码。

有些用户可能想要伪造或隐藏该信息(想想有人拥有某种“Linux From Scratch”系统)。