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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top