gethostbyname 子例程
用途
按名称获取网络主机条目。
库
Standard C Library (libc.a)
(libbind)
(libnis)
(liblocal)语法
描述
gethostbyname 子例程是线程安全的。 但是,返回值指向被后续调用覆盖的静态数据。 必须复制此数据以保存以供后续调用使用。
gethostbyname 子例程使用主机名作为搜索键来检索主机地址和名称信息。 除非指定,否则 gethostbyname 子例程使用缺省名称服务排序,即,它查询 DNS/BIND , NIS 或本地 /etc/hosts 文件以获取名称。
使用 DNS/BIND 名称服务解析时,如果 /etc/resolv.conf 文件存在,那么 gethostbyname 子例程会查询域名服务器。 gethostbyname 子例程识别域名服务器,如 RFC883中所述。
当使用 NIS 进行名称解析时,如果 getdomaninname 子例程成功并且 yp_bind 指示黄色页面正在运行,那么 gethostbyname 子例程将查询 NIS 以获取名称。
gethostbyname 子例程还在本地 /etc/hosts 文件中搜索指示这样做的名称。
gethostbyname 子例程返回指向 hostent 结构的指针,该结构包含从名称解析服务获取的信息。 hostent 结构在 netdb.h 头文件中定义。
参数
| 项 | 描述 |
|---|---|
| 名称 | 指向主机名。 |
返回值
gethostbyname 子例程在成功时返回指向 hostent 结构的指针。
如果传递到 gethostbyname 的参数 Name 实际上是 IP 地址,那么 gethostbyname 将返回非 NULL 主机结构,其中 IP 地址作为主机名,而不会实际执行查找。 在调用 gethostbyname之前,请记住调用 inet_addr 子例程以确保 Name 不是 IP 地址。 改为解析 IP 地址调用 gethostbyaddr 。
如果发生错误或到达文件末尾,那么 gethostbyname 子例程返回空指针并设置 h_errno 以指示错误。
可以将环境变量 NSORDER 设置为覆盖缺省名称服务排序和 /etc/netsvc.conf 文件中指定的顺序。
缺省情况下,解析器例程首先尝试通过 DNS/BIND ,然后通过 NIS 和 /etc/hosts 文件来解析名称。 /etc/netsvc.conf 文件可以指定不同的搜索顺序。 环境变量 NSORDER 覆盖 /etc/netsvc.conf 文件和缺省排序。 服务按 hosts = value, value, /etc/netsvc.conf 文件中的 value ,其中必须从列表 bind nis中至少指定一个值。 local。 NSORDER 指定值列表。
错误代码
如果发生以下任何错误,那么 gethostbyname 子例程不成功:
| 错误 | 描述 |
|---|---|
| 主机未找到 | 找不到由 Name 参数指定的主机。 |
| 重试 | 本地服务器未接收到来自授权服务器的响应。 请稍后重试。 |
| 无法恢复 | 此错误代码指示不可恢复的错误。 |
| 无地址 | 请求的 名称 有效,但在名称服务器上没有因特网地址。 |
| 服务不可用 | 指定的任何名称服务都未在运行或不可用。 |
示例
以下程序片段说明了如何使用 gethostbyname 子例程来查找目标主机:
hp=gethostbyname(argv[1]);
if(hp = = NULL) {
fprintf(stderr, "rlogin: %s: unknown host\n", argv[1]);
exit(2);
}文件
| 项 | 描述 |
|---|---|
| /etc/hosts | 包含主机名数据库。 |
| /etc/resolv.conf | 包含名称服务器和域名。 |
| /etc/netsvc.conf | 包含名称服务排序。 |
| /usr/include/netdb.h | 包含网络数据库结构。 |