1.7 系统信息
当我们面对一台计算机时,首先想要了解的可能是这台机器的系统特征,如机器的名字、操作系统的名称和版本号、系统的能力和限制等信息。这一节介绍几个获取主机信息的函数,下一节讨论系统的能力限制值。
1.7.1 机器标识
每一台机器都有一个主机名。主机名由系统管理员指定,在网络中主机名可能是一个网络域名。
函数gethostname()和sethostname ()可用来获取和设置主机名。
#include <unstd.h>
int gethostname (char *name,size_t size);
int sethostname (const char *name,size_t length);
gethostname()返回以NUL(0)字符结束的主机名于字符数组name之中,参数size给出此数组的字节大小。当size 指定的空间不足以存放主机名时,gethostname()存储截断了的主机名至name,并且返回–1。此时,应当用一个更大的数组重新调用该函数。POSIX规定主机名的字符个数不超过系统符号常数HOST_NAME_MAX之值,Linux定义其值为64字节。
sethostname()设置主机的名字为name,name是一个长度为length的字符串。只有特权进程才允许调用此函数,通常它只在系统自举时调用一次。
1.7.2 硬件/软件类型识别
函数uname()可用来查看运行该程序的计算机的操作系统版本和硬件信息。
#include <sys/utsname.h>
int uname(struct utsname *info);
uname()是一个系统调用,成功时返回非负整数,同时将操作系统和主机的信息保存在info所指的数据结构中;失败则返回–1。其中utsname结构类型的成员如表1-2所示。
utsname成员的长度与特定的实现有关。有的实现使用固定数值常数,有的实现则使用符号常数,如UTSLEN或_UTSNAME_LENGTH等。不过当我们希望获得uname()返回的这些成员的有效数据长度时,最好由sizeof()来确定。
例1-2 程序1-2是gethostname()和uname()的示例程序,它打印出机器的主机名、操作系统版本号和机器类型信息。