Вопрос

Я не знаю, как писать приложения в C, но мне нужна крошечная программа, которая делает:

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

Выходная переменная должна быть напечатана.

Счастливый день.

Это было полезно?

Решение

#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.

Официальное название хоста (ПК). При использовании системы DNS или аналогичного разрешения это полностью квалифицированное доменное имя (FQDN), привело к возврату сервера. При использовании файла локальных хостов, это первая запись после адреса IPv4.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top