UNAME - Linux手册页
Linux程序员手册 第2部分
更新日期: 2019-10-10
名称
uname-获取有关当前内核的名称和信息
语法
#包括
int uname(结构utsname * buf);
说明
uname()以buf指向的结构返回系统信息。 utsname结构定义于:
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 };
未指定结构体utsname中的数组长度(请参见NOTES);这些字段以空字节(aq \ 0aq)终止。
返回值
成功时,返回零。如果出错,则返回-1,并正确设置errno。
错误说明
- EFAULT
- buf无效。
遵循规范
POSIX.1-2001,POSIX.1-2008,SVr4。在4.3BSD中没有uname()调用。
域名成员(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,以便为Internet主机名留出空间。
utsname信息的一部分也可以通过/ proc / sys / kernel / {ostype,hostname,osrelease,version,domainname}访问。
C library/kernel differences
随着时间的流逝,utsname结构的大小增加导致了uname()的三个连续版本:sys_olduname()(插槽__NR_oldolduname),sys_uname()(插槽__NR_olduname)和sys_newuname()(插槽__NR_uname)。第一个为所有字段使用长度9;第二个使用65;第三个也使用65,但添加了域名字段。 glibc uname()包装函数会将这些详细信息隐藏到应用程序中,从而调用内核提供的最新版本的系统调用。
另外参见
uname(1),getdomainname(2),gethostname(2),uts_namespaces(7)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。