C中的gethostbyname

我不知道如何用C编写应用程序,但我需要一个小程序:

lh = gethostbyname("localhost"); output = lh->h_name; 

输出变量将被打印。

以上代码用于PHP MongoDB数据库驱动程序以获取计算机的主机名(主机名是输入的一部分,用于生成唯一ID)。 我怀疑这将返回主机名,所以我想要一些证据。

任何代码示例都会非常有用。

愉快的一天。

 #include  #include  int main(int argc, char *argv[]) { struct hostent *lh = gethostbyname("localhost"); if (lh) puts(lh->h_name); else herror("gethostbyname"); return 0; } 

它不是确定主机名的非常可靠的方法,尽管它有时可能有效。 (返回的内容取决于/etc/hosts的设置方式)。 如果你有一条像:

 127.0.0.1 foobar localhost 

…然后它将返回“foobar”。 如果你有相反的方式,这也很常见,那么它只会返回“localhost”。 更可靠的方法是使用gethostname()函数:

 #include  #include  #include  int main(int argc, char *argv[]) { char hostname[HOST_NAME_MAX + 1]; hostname[HOST_NAME_MAX] = 0; if (gethostname(hostname, HOST_NAME_MAX) == 0) puts(hostname); else perror("gethostname"); return 0; } 

在C / UNIX中,等效的类似于:

 #include  #include  int main (int argc, char *argv[]) { struct hostent *hstnm; if (argc != 2) { fprintf(stderr, "usage: %s hostname\n", argv[0]); return 1; } hstnm = gethostbyname (argv[1]); if (!hstnm) return 1; printf ("Name: %s\n", hstnm->h_name); return 0; } 

并certificate它有效:

 $ hstnm localhost Name: demon-a21pht 

但是亲自尝试一下。 如果你有正确的环境,它应该没问题。

怎么了?

h_name复制

主机(PC)的官方名称。 如果使用DNS或类似的解决方案系统,则使用服务器返回答复的是完全限定域名(FQDN)。 如果使用本地主机文件,则它是IPv4地址之后的第一个条目。