uname() - Unix、Linux 系统调用
Tutorials Point


  Unix 初学者指南
  Unix Shell 编程
  高级 Unix
  Unix 有用参考
  Unix 有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考     讨论论坛     关于TP  

uname() - Unix、Linux 系统调用


previous next AddThis Social Bookmark Button

广告

名称

uname - 获取当前内核的名称和信息

语法

#include <sys/utsname.h> 

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 被相应地设置。

错误

标签描述
EFAULT buf 无效。

符合标准

SVr4、POSIX.1-2001。4.3BSD 中没有 uname() 调用。

domainname 成员(NIS 或 YP 域名)是 GNU 扩展。

备注

这是一个系统调用,操作系统大概知道自己的名称、版本和发布版本。它还知道其运行的硬件。因此,结构体的四个字段是有意义的。另一方面,字段 nodename 毫无意义:它在某个未定义的网络中给出了当前机器的名称,但通常机器位于多个网络中并具有多个名称。此外,内核无法知道此类信息,因此必须告知它在此处应答什么。对于额外的 domainname 字段也是如此。

为此,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 信息的一部分。

参见



previous next Printer Friendly

广告


  

广告



广告