C中的gethostbyname

时间:2010-05-19 12:49:36

标签: c gethostbyname

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

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

输出变量。

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

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

快乐的一天。

3 个答案:

答案 0 :(得分:19)

#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;
}

答案 1 :(得分:6)

在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

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

答案 2 :(得分:2)

出了什么问题?

  

<强> h_name复制

     

主机(PC)的官方名称。如果   使用DNS或类似的解决方案   系统,它是完全合格的   导致该域名的域名(FQDN)   服务器返回一个回复。如果使用   本地主机文件,它是第一个   在IPv4地址之后输入。