题
我不知道如何在C中编写应用程序,但是我需要一个很小的程序来:
lh = gethostbyname("localhost");
output = lh->h_name;
输出变量将打印。
以上代码在PHP MongoDB数据库驱动程序中使用以获取计算机的主机名(主机名是生成唯一ID的输入的一部分)。我对此表示怀疑,这将返回主机名,所以我想要一些证明。
任何代码示例都将最有帮助。
愉快的一天。
解决方案
#include <stdio.h>
#include <netdb.h>
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 <stdio.h>
#include <unistd.h>
#include <limits.h>
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 <stdio.h>
#include <netdb.h>
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;
}
以及它有效的证据:
$ hstnm localhost
Name: demon-a21pht
但是自己尝试。只要您有正确的环境,那就可以了。
怎么了?
h_name
主机的官方名称(PC)。如果使用DNS或类似的分辨率系统,则导致服务器返回答复的是完全合格的域名(FQDN)。如果使用本地主机文件,则是IPv4地址之后的第一个条目。
不隶属于 StackOverflow