gethostbyname 子例程

用途

按名称获取网络主机条目。

Standard C Library (libc.a)
(libbind)
(libnis)
(liblocal)

语法

#include <netdb.h>

struct hostent *gethostbyname ( Name)
char *Name;

描述

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 = valuevalue/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 包含网络数据库结构。