Vala程序如何判断当前操作系统(包括Linux情况下的具体分布)?
How to determine present operating system (including specific distribution in the case of Linux) in a Vala program?
我有兴趣编写一个 Vala 程序,它将确定当前的操作系统并相应地采取行动(具体如何行动我还没有决定,但与这个问题无关)。所以我想知道的是我如何在运行时确定 Vala 程序中的当前操作系统(包括 Linux 情况下的特定分布)。
除非您正在编写系统级代码(如程序包管理器或 OS 配置代码),否则 您不应该。更好的选择是使用已经为您抽象了分发细节的库。
如果您绝对必须这样做,有两种主要方法:
构建时
在这里你的构建系统应该负责检测 OS / 分布并且将一个定义传递给编译器(比如 -DDISTRO_UBUNTU
)或者写一个 config.vala
文件(possibly 来自模板 config.vala.in
并进行替换,例如 autotools 具有 AC_CONFIG_FILES
工具来执行此操作)。
运行时
此处您的工具会在 运行 时自行检测。
更适合您的应用程序是一种设计选择。
至于如何操作,您可以检查几件事:
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”系统)。
我有兴趣编写一个 Vala 程序,它将确定当前的操作系统并相应地采取行动(具体如何行动我还没有决定,但与这个问题无关)。所以我想知道的是我如何在运行时确定 Vala 程序中的当前操作系统(包括 Linux 情况下的特定分布)。
除非您正在编写系统级代码(如程序包管理器或 OS 配置代码),否则 您不应该。更好的选择是使用已经为您抽象了分发细节的库。
如果您绝对必须这样做,有两种主要方法:
构建时
在这里你的构建系统应该负责检测 OS / 分布并且将一个定义传递给编译器(比如
-DDISTRO_UBUNTU
)或者写一个config.vala
文件(possibly 来自模板config.vala.in
并进行替换,例如 autotools 具有AC_CONFIG_FILES
工具来执行此操作)。运行时
此处您的工具会在 运行 时自行检测。
更适合您的应用程序是一种设计选择。
至于如何操作,您可以检查几件事:
的内核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”系统)。