Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1467301
  • 博文数量: 842
  • 博客积分: 12411
  • 博客等级: 上将
  • 技术积分: 5772
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-14 14:43
文章分类

全部博文(842)

文章存档

2013年(157)

2012年(685)

分类: 系统运维

2012-05-14 17:09:33



POSIX.1定义了uname函数来返回当前主机和操作系统的信息。



  1. #include <sys/utsname.h>

  2. int uname(struct utsname *name);

  3. 成功返回非负值,失败返回-1。


我们传递一个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网络上的主机名。


  1. #include <unistd.h>

  2. int gethostname(char *name, int namelen);

  3. 成功返回0,失败返回-1。


namelen参数指定了name缓冲的尺寸。如果提供了足够的空间,返回的字符串以null结尾。如果没有提供足够的空间,没有指定这个字符串是否以null结尾。


gethostname函数现是POSIX.1的一部分,指定了最大主机名的长度为HOST_NAME_MAX。由本文四个平台支持的最大名字长度在前面的表里给出了。


如果主机连接到一个TCP/IP网络,那么主机名通常是这个主机的完整域名。


有一个hostname命令可以得到或设置主机名。(主机名由超级用户使用一个相似的函数sethostname来设置。)主机名通常在启动时,由/etc/rc或init引入的start-up文件设置。
阅读(324) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~