【发布时间】:2021-12-06 22:20:29
【问题描述】:
当我在命令行上运行uname -a 时,我得到以下输出:
Linux raspberrypi 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux
这是通过-a参数实现的,相当于使用这些参数(有6个)-snrvmo。
我正在尝试使用 C 中的 uname() 系统调用来复制它。manpage 对我返回的 uname() 结构表示以下内容:
DESCRIPTION
uname() returns system information in the structure pointed to by buf. The utsname struct is de‐
fined in <sys/utsname.h>:
struct utsname {
char sysname[]; /* Operating system name (e.g., "Linux") */
char nodename[]; /* Name within "some implementation-defined
network" */
char release[]; /* Operating system release (e.g., "2.6.28") */
char version[]; /* Operating system version */
char machine[]; /* Hardware identifier */
#ifdef _GNU_SOURCE
char domainname[]; /* NIS or YP domain name */
#endif
};
您会注意到没有与命令行uname -o 选项对应的操作系统字符串。 uname --help 显示有一个 -o 参数来显示操作系统,并且在 uname() 系统调用返回的结构中似乎不可用。
-o, --operating-system
print the operating system
所以我似乎能做的最好的事情是使用系统调用获取以下信息,指出“GNU/Linux”并不像uname -a 给出的那样结束:
Linux raspberrypi 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l
有没有办法像使用 uname -o 一样在我的 C 程序中获取操作系统名称(在本例中为“GNU/Linux”)?
My source code is essentially this
【问题讨论】: