首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

4.6  主机信息

正如可以查找用户信息一样,程序也可以获得运行它的计算机的有关细节。uname(1)命令提供这类信息。uname(2)作为一个系统调用,也能在C语言程序中提供同样的信息——用man 2 uname命令可以查到它的用法。

主机信息在许多情况下都是很有用的。我们可能希望根据程序运行的机器在网络上的名字来定制程序的行为,比如说,这台机器是学生用的还是管理员用的。从许可证的角度考虑,我们可能希望限制程序只能在一台机器上运行。所有这些都意味着我们需要一个方法来确定程序运行在哪台机器上。

如果系统安装了网络组件,我们可以通过gethostname函数来容易地获得其网络名:

gethostname函数把机器的网络名写入name字符串。该字符串至少有namelen个字符长。成功时,gethostbyname返回0,否则返回-1。

你可以通过uname系统调用获得关于主机的更多详细信息:

uname函数把主机信息写入name参数指向的结构。utsname结构定义在头文件sys/utsname.h中,它至少包含表4-5所示的成员。

表  4-5

utsname成员

说    明

char sysname[]

操作系统名

char nodename[]

主机名

char release[]

系统发行级别

char version[]

系统版本号

char machine[]

硬件类型

uname在成功时返回一个非负整数,否则返回-1并设置errno以指出错误。

实验:主机信息

下面的程序hostget.c能够提取出一些主机信息:

它给出如下所示的Linux特有的信息。如果你的机器联网了,你可能会看到一个包含网络名在内的扩展主机名。

实验解析

这个程序调用gethostname来获得主机的网络名。在上面的例子中,它获得名字beast。有关这台基于Intel Pentium-II的Linux计算机的更多信息通过uname调用返回。注意,uname返回的字符串的格式是与具体实现相关的,在本例中,版本字符串包含内核编译的日期。

使用uname函数的另外一个例子请参看uname命令的Linux源代码。

每台主机的唯一标识符可以通过gethostid函数获得:

gethostid函数返回与主机计算机对应的一个唯一的值。许可证管理者利用它来确保软件程序只能在拥有合法许可证的机器上运行。在Sun工作站上,该函数返回计算机生产时设置在非易失性存储器中的一个数字,它对系统硬件来说是唯一的。

其他系统,如Linux,返回一个基于该机器因特网地址的值,但这对许可证管理来说通常不是太安全。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论