我有兴趣编写一个Vala程序,该程序将确定当前的操作系统并采取相应的行动(具体如何行动我尚未决定,但与此问题无关)。所以我想知道的是如何在运行时在Vala程序中确定当前的操作系统(包括Linux中的特定分发)。
答案 0 :(得分:1)
除非您正在编写系统级代码(例如包管理器或操作系统配置代码),否则不应该。一个更好的选择是使用已经为您提取分布细节的库。
如果您必须这样做,有两种主要方法:
在构建时
在这里,您的构建系统应负责检测OS /分发并将定义传递给编译器(如-DDISTRO_UBUNTU
)或编写config.vala
文件(可能来自模板{{1}使用替换,例如autotools具有config.vala.in
工具来执行此操作。)
在运行时
此处,您的工具在运行时会自行进行检测。
更适合您的应用的是设计选择。
关于如何做,有几件事你可以检查:
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”系统)。