当我uname -a
在命令行上运行时,我得到以下输出:
Linux raspberrypi 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux
这是通过-a
等效于使用这些参数的参数来实现的(有6个)-snrvmo
。
我正在尝试使用uname()
C 中的系统调用来复制它。联机帮助页对我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
有没有办法像我可以使用的那样在我的 C 程序中获取操作系统名称(在本例中为“GNU/Linux”)uname -o
?
我的源代码本质上是这样的