版权所有 © 2014 tutorialspoint
uname - 获取当前内核的名称和信息
#include <sys/utsname.h> int uname(struct utsname *buf);
int uname(struct utsname *buf);
uname() 将系统信息返回到 buf 指向的结构体中。utsname 结构体在 <sys/utsname.h> 中定义。
struct utsname { char sysname[]; char nodename[]; char release[]; char version[]; char machine[]; #ifdef _GNU_SOURCE char domainname[]; #endif };
struct utsname 中数组的长度未指定;字段以空字节 (’’ ’) 结尾。
成功时,返回零。发生错误时,返回 -1,并且 errno 被相应地设置。
domainname 成员(NIS 或 YP 域名)是 GNU 扩展。
为此,Linux 使用系统调用 sethostname(2) 和 setdomainname(2)。请注意,没有标准规定由 sethostname(2) 设置的主机名与 uname() 返回的结构体的 nodename 字段是相同的字符串(实际上,某些系统允许 256 字节的主机名和 8 字节的节点名),但在 Linux 上确实如此。对于 setdomainname(2) 和 domainname 字段也是如此。
结构体中字段的长度各不相同。某些操作系统或库使用硬编码的 9 或 33 或 65 或 257。其他系统使用 SYS_NMLN 或 _SYS_NMLN 或 UTSLEN 或 _UTSNAME_LENGTH。显然,使用任何这些常量都是一个坏主意;只需使用 sizeof(...)。通常选择 257 以便为互联网主机名留出空间。
已经存在三个 Linux 系统调用 uname()。第一个使用长度 9,第二个使用 65,第三个也使用 65 但添加了 domainname 字段。
也可以通过 sysctl() 和 /proc/sys/kernel/{ostype, hostname, osrelease, version, domainname} 访问 utsname 信息的一部分。
uname (1)
getdomainname (2)
gethostname (2)
广告