2016-12-24 59 views
0

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

+0

相关:https://stackoverflow.com/questions/29634474/is-os-detection-possible-with-glib –

+0

相关:https://stackoverflow.com/questions/1678842/is-there-any-way -to-发现,出其中Linux的分布,是使用的 –

回答

1

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

如果你非得有两种主要的方式做到这一点:

  1. 在构建时

    这里构建系统应负责检测OS /分配,要么通过一个定义到编译器(如-DDISTRO_UBUNTU)或编写一个文件(可能从模板config.vala.in替换,例如autotools有AC_CONFIG_FILES设施来执行此操作)。

  2. 在运行时

    这里您的工具不检测本身时,它的运行。

哪个更适合您的应用是设计选择。

至于如何做到这一点有几件事情你可以检查:

  • uname -a(或其他参数,见人UNAME)会给你当前正在运行的内核。

  • lsb_release -a(不适用于每个发行版,有时是可能具有软件包依赖关系的可选软件包)会为您提供有关正在运行的发行版和发行版的信息。

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

  • 有些人试图阅读/etc/issue,但这很危险,因为该文件可以由管理员/用户修改。

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

还有一些os信息库,你可以使用。

0

您可以使用uname(2)系统调用(如何做,在瓦拉被作为练习留给用户),或读/proc/version(见proc(5)),或读/etc/issues或按照Linux Standard Base约定(如popenlsb_release -a输出) 。

但由于延Mühlenhoffanswered你不应该这样做,并避免编写代码依赖于某些特定的分布。

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

相关问题