Pregunta
No sé cómo escribir aplicaciones en C, pero necesito un pequeño programa que hace:
lh = gethostbyname("localhost");
output = lh->h_name;
variable de salida se va a imprimir.
El código anterior se utiliza en el controlador de base de datos PHP MongoDB para obtener el nombre de host del ordenador (nombre de host es parte de una entrada para generar un identificador único). Soy escéptico de que esto devolverá el nombre de host, así que me gustaría alguna prueba.
Cualquier ejemplos de código sería de gran ayuda.
Día feliz.
Solución
#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;
}
No es una forma muy fiable para determinar el nombre de host, aunque a veces puede funcionar. (Lo que devuelve depende de cómo esté configurado /etc/hosts
). Si usted tiene una línea como:
127.0.0.1 foobar localhost
... luego volverá "foobar". Si lo tienes al revés, sin embargo, que también es común, entonces, sólo se devolverá "localhost". Una forma más fiable es utilizar la función 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;
}
Otros consejos
En C / UNIX, el equivalente sería algo como:
#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;
}
y la prueba de que funciona:
$ hstnm localhost
Name: demon-a21pht
Sin embargo, hacerlo por uno mismo. Siempre que tenga el entorno correcto, que debería estar bien.
lo que está mal?
h_name
El nombre oficial del host (PC). Si utilizando el DNS o resolución similar sistema, es totalmente calificado Nombres de dominio (FQDN) que causó la servidor devuelva una respuesta. Si se utiliza una archivo de hosts local, que es la primera la entrada después de la dirección IPv4.