Вопрос
Я не знаю, как писать приложения в 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.