UNAME - Linux手册页

时间:2019-08-20 17:59:36  来源:igfitidea点击:

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 / {ostypehostnameosreleaseversion,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/