从 utsname 中找出 Linux 操作系统名称

Posted

技术标签:

【中文标题】从 utsname 中找出 Linux 操作系统名称【英文标题】:Figure out Linux OS name from utsname 【发布时间】:2018-09-26 07:44:28 【问题描述】:

我正在尝试从 c++ 代码中获取 Linux 操作系统名称(例如,“Ubuntu 16.04”、“Ubuntu 14.04”等)。我开始了解 utsname 并尝试使用它。但是结构字段 sysname、release、version 等中的值描述性太强,我想要一些简单的东西(比如“Ubuntu 16.04”、“Ubuntu 14.04”等)。是否有一些文档可以将 utsname 结构中的值映射到一些简单的名称?

utsname 结构的字段值:

sysname: Linux
nodename: ubuntu16-server
release: 4.4.0-130-generic
version: #156-Ubuntu SMP Thu Jul 29 23:11:20 UTC 2017
machine: x86_64

【问题讨论】:

我认为这篇文章可能有用。 ***.com/questions/6315666/… 你在什么编程环境上编码? 【参考方案1】:

在终端试试这个命令:

    cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.5 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.5 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

或者这个:

    cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"

我不知道你在什么编程环境下编写代码。所以你可能需要一个Process 来执行并返回终端命令,然后你需要解析输出。 (如果需要,也可以在终端中使用 cat 命令完成解析)

【讨论】:

如果我对OP的理解正确,获取系统信息和解析应该是从编译好的程序中。生成系统外壳当然是可能的,但这既不是好的解决方案,也不是预期的解决方案。 我知道这个解决方案。但我的问题不同;我特别想使用 utsname 来获取操作系统名称,这可能需要一些从 utsname 结构中的值到操作系统名称的映射的帮助。

以上是关于从 utsname 中找出 Linux 操作系统名称的主要内容,如果未能解决你的问题,请参考以下文章

utsname 和 systemInfo 是啥?

[国嵌攻略][109][Linux系统调用]

如何从信号中找出进程的 pid 在 linux 的 c++ 中启动?

如何在 Linux 平台上找出我的 Web 浏览器用于从 Web 服务器接收数据包的端口?

如何找出 Linux 上的 GNU C++ 中剩余的可用内存量

Linux系统下查看USB设备名及使用USB设备