分类: 系统运维
2012-03-29 12:37:22
POSIX.1定义了uname函数来返回当前主机和操作系统的信息。
我们传递一个utsname结构体的地址,而这个函数把它填满。POSIX.1只定义了这个结构体里的最少的域,它们都是字符数组,根据每个实现来设置各数组的尺寸。一些实现在这个结构体里提供了额外的域。
struct utsname {
char sysname[]; /* name of the operating system */
char nodename[]; /* name of hits node */
char release[]; /* current release of operating system */
char version[]; /* current version of this release */
char machine[]; /* name of hardware type */
};
每个字符串都以null终止。本文的四个平台的最大名字长度在下表中列出:
系统识别名的限制 | ||||
接口 | 最大名字长度 | |||
FreeBSD 5.2.1 | Linux 2.4.22 | Mac OS X 10.3 | Solaris 9 | |
uname | 256 | 65 | 256 | 257 |
gethostname | 256 | 64 | 256 | 256 |
utsname结构体的信息通常可能用uname命令打印出来。
POSIX.1警告,nodename可能不足以用来引用一个联系网络的主机。这个函数从System V而来,而在过去,nodename元素被用来在一个UUCP网络标识主机。
还要意识到这个结构体里的信息没有给出关于POSIX.1级别的任何作息。它应该使用_POSIX_VERSION得到,如2.6节。
最后,这个函数只给了我们一种得到这个结构体里的信息的方法,而POSIX.1没有指定任何关于初始化这个信息的方法。
历史上,基于BSD的系统提供了gethostname函数来只返回主机的名字。这个名字通常是在TCP/IP网络上的主机名。
namelen参数指定了name缓冲的尺寸。如果提供了足够的空间,返回的字符串以null结尾。如果没有提供足够的空间,没有指定这个字符串是否以null结尾。
gethostname函数现是POSIX.1的一部分,指定了最大主机名的长度为HOST_NAME_MAX。由本文四个平台支持的最大名字长度在前面的表里给出了。
如果主机连接到一个TCP/IP网络,那么主机名通常是这个主机的完整域名。