c[英] gethostbyname in C

本文是小编为大家收集整理的关于c的处理方法,想解了c的问题怎么解决?c问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我不知道如何在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地址之后的条目.

本文地址:https://www.itbaoku.cn/post/359231.html