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