C 中的 gethostbyname

发布于 2024-09-02 20:23:38 字数 272 浏览 3 评论 0原文

我不知道如何用 C 语言编写应用程序,但我需要一个小程序来执行以下操作:

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

打印输出变量。

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

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

快乐的一天。

I don't know how to write applications in C, but I need a tiny program that does:

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

output variable is to be printed.

The above code is used in PHP MongoDB database driver to get the hostname of the computer (hostname is part of an input to generate an unique ID). I'm skeptical that this will return the hostname, so I'd like some proof.

Any code examples would be most helpful.

Happy day.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

慕烟庭风 2024-09-09 20:23:38
#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;
}
#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;
}

It is not a very reliable way of determining the hostname, though it may sometimes work. (what it returns depends on how /etc/hosts is set up). If you have a line like:

127.0.0.1    foobar    localhost

...then it will return "foobar". If you have it the other way around though, which is also common, then it will just return "localhost". A more reliable way is to use the gethostname() function:

#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;
}
平安喜乐 2024-09-09 20:23:38

在 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

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

In C/UNIX, the equivalent would be something like:

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

and the proof that it works:

$ hstnm localhost
Name: demon-a21pht

But try it yourself. Provided you have the correct environment, it should be fine.

罪歌 2024-09-09 20:23:38

怎么了?

h_name

主机(PC)的正式名称。如果
使用 DNS 或类似的解析
系统,它是完全合格的
导致该问题的域名 (FQDN)
服务器返回回复。如果使用
本地hosts文件,这是第一个
IPv4 地址后的条目。

what is wrong?

h_name

The official name of the host (PC). If
using the DNS or similar resolution
system, it is the Fully Qualified
Domain Name (FQDN) that caused the
server to return a reply. If using a
local hosts file, it is the first
entry after the IPv4 address.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文