曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5455|回复: 0
打印 上一主题 下一主题

主机信息(Host Information)

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2009-2-22 23:25:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uname 命令可以打印出系统的相关信息。
uname 也作为系统调用而存在,它在 C 程序里提供了同样的信息(同uname命令一样),详情见 man 2 uname .

如果系统已经安装了网络组件,你可以通过 gethostname() 函数很容易就获得了网络名:

#include <unistd.h>
int gethostname(char *name, size_t namelen);

gethostname() 函数把机器的网络名写到参数 name 中。这个网络名字符串假设至少 namelen 个字符长度。
gethostname() 函数如果执行成功就返回 0;否则就返回 -1 。

从 uname 系统调用中可以获得更多的主机详细信息:
#include <sys/utsname.h>
int uname(struct utsname *name);

uname() 函数把主机信息向到由 name 参数指向的结构体中。utsname 结构体定义在 sys/utsname.h 里,必须包含至少以下所示成员:

utsname Member                 Description
char sysname[]                    操作系统名
char nodename[]                   主机名
char release[]                      系统的释放版本号release level(如CentOS的一个内核版本号:2.6.18-92.1.22.el5xen)
char version[]                      系统版本号
char machine[]                     硬件类型

uname 成功执行则返回一个非负整数数,否则返回 -1 并且还设置 errno 以示有错误。

示例代码
01 #include <sys/utsname.h>
02 #include <unistd.h>
03 #include <stdio.h>
04 #include <stdlib.h>
05
06 int main()
07 {
08         char computer[256];
09         struct utsname uts;
10
11         if(gethostname(computer, 255) != 0 || uname(&uts) < 0) {
12                 fprintf(stderr, "Could not get host information\n");
13                 exit(1);
14         }
15
16         printf("Computer host name is %s\n", computer);
17
18         printf("System is %s on %s hardware\n", uts.sysname, uts.machine);
19         printf("Nodename is %s\n", uts.nodename);
20         printf("Version is %s, %s\n", uts.release, uts.version);
21         exit(0);
22 }
运行输出
[root@localhost C]# ./hostget.exe
Computer host name is localhost.localdomain
System is Linux on i686 hardware
Nodename is localhost.localdomain
Version is 2.6.18-92.1.22.el5xen, #1 SMP Tue Dec 16 13:08:49 EST 2008

说明
注意,由 uname 返回的字符串格式是“实现相关的”(implementation-dependent),版本字符串包含内核编译的日期。

对于每一个主机,从 gethostid() 函数里可能得到一个可用的特定标识符:
#include <unistd.h>
long gethostid(void);

gethostid() 函数倾向于返回一个主机的特定值。证书管理员使用这来确保软件仅可以在这台持有有效授权(证书)的机器上运行。在Sun 工作站上,它返回一个当计算机建好时就被存储在非易失存储器中的一个数字,这个数字是这个系统硬件所特有的。其它系统,如 Linux,返回一个基于机器互联网地址的值,这个通常对于用来做授权是没有足够安全性的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 05:40 , Processed in 0.081175 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表