如何在Vala程序中确定当前的操作系统(包括Linux中的特定分发)?

时间:2016-12-24 12:27:15

标签: operating-system vala

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

2 个答案:

答案 0 :(得分:1)

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

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

  1. 在构建时

    在这里,您的构建系统应负责检测OS /分发并将定义传递给编译器(如-DDISTRO_UBUNTU)或编写config.vala文件(可能来自模板{{1}使用替换,例如autotools具有config.vala.in工具来执行此操作。)

  2. 在运行时

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

  3. 更适合您的应用的是设计选择。

    关于如何做,有几件事你可以检查:

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

    • uname -a(在每个发行版上都不可用,有时候是一个可能与程序包相关的可选包)会为您提供有关正在运行的发行版和发行版的信息。

    • 在Debian / Ubuntu派生词上有一个名为lsb_release -a的文件,它指示当前安装的版本。但这些信息并不完全准确。

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

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

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

答案 1 :(得分:0)

您可以使用uname(2)系统调用(如何在Vala中将其作为练习留给用户),或阅读/etc/issue(请参阅proc(5))或阅读{{ 1}}或遵循Linux Standard Base约定(例如/proc/version /etc/issues的输出。

但是正如JensMühlenhoffanswered你不应该这样做,并且避免根据某些特定的发行版编写代码。

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