c++ - 以编程方式确定我正在运行的发行版

标签 c++ linux

全部,

我想看看我正在运行我的 C++ 程序的 Linux 风格是什么。

我找到了 this answer on SO suggesting the uname program但人们通常不想在 C++ 代码中解析某些实用程序的输出。

现在我可以在配置中做这样的测试,但我感兴趣的是我的程序的用户有什么操作系统,而不是我在哪里进行编译,这可能是完全不同的(我个人喜欢 Gentoo,但没有人能保证我的客户会得到它)。

那么有什么可靠的方法可以从 C++ 程序中确定 Linux 发行版的名称吗?

最佳答案

呼应这个问题的最佳答案https://unix.stackexchange.com/questions/6345/how-can-i-get-distribution-name-and-version-number-in-a-simple-shell-script在 Unix Stack Exchange 上:

比执行命令并解析它稍微好一点的是告诉您的代码解析文件/etc/lsb-release,它看起来是这样的:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"

DISTRIB_ID 行是发行版名称所在的行。 警告,根据 lsb-release man page , 此行是可选的。然而,许多发行版(包括 Mint、Ubuntu、Redhat,当然还有 Gentoo)的最新版本在它们的/etc/lsb-release 文件中包含 DISTRIB_ID。

考虑到这些注意事项,您可能会发现解析 lsb-release 足以满足您的目的,尽管要获得最广泛的覆盖,您必须硬着头皮执行并解析相关实用程序 lsb_release,以及可能回退到其他实用程序。

关于c++ - 以编程方式确定我正在运行的发行版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32686490/

相关文章:

c++ - 创建基于模板和 boost::shared_ptr 的通用工厂时出现编译错误

linux - 如何检查sed是否更改了文件

c++ - Linux C++ 编译器(和链接器)如何决定将类型信息放在哪里?

linux - 将 PHP 框架放在 Linux 主机上的什么位置

c++ - 该程序未打印整个字符串

c++ - 无法正确跟踪鼠标移动,setMouseTracking 无效 - Qt

linux - 为什么文件系统有自己的 block 大小,而不是使用硬盘 block 大小?

linux - 用于监视 Gentoo 上的 nginx 日志文件的 shellscript 在日志文件被 gzip 后过期

c++ - 如何让我以前的消息在 Visual Studio 2013 控制台应用程序中消失? (C++)

c++ - 如何转换 boost::Exception?