【问题标题】:How to determine present operating system (including specific distribution in the case of Linux) in a Vala program?如何在 Vala 程序中确定当前的操作系统(包括 Linux 的特定发行版)?
【发布时间】:2016-12-24 12:27:15
【问题描述】:

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

【问题讨论】:

标签: operating-system vala


【解决方案1】:

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

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

  1. 在构建时

    在这里,您的构建系统应该负责检测操作系统/发行版,并将定义传递给编译器(如 -DDISTRO_UBUNTU)或编写 config.vala 文件(可能来自模板 config.vala.in 替换,例如 autotools有AC_CONFIG_FILES 设施可以做到这一点)。

  2. 在运行时

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

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

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

  • uname -a(或其他参数,见 man uname)将为您提供当前正在运行的内核。

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

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

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

  • 您可以询问用户她正在运行哪个操作系统。

还有一些你可以使用的操作系统信息库。

【讨论】:

    【解决方案2】:

    您可以使用uname(2) 系统调用(如何在 Vala 中执行此操作留给用户作为练习),或阅读/proc/version(请参阅proc(5)),或阅读/etc/issues 或关注Linux Standard Base约定(例如popenlsb_release -a 的输出)。

    但正如 Jens Mühlenhoff answered您不应该这样做,并避免根据某些特定分布编写代码。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 2017-11-25
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多