Domanda

Non so come scrivere applicazioni in C, ma ho bisogno di un piccolo programma che fa:

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

variabile di uscita deve essere stampata.

Il codice sopra è usato in driver di database MongoDB PHP per ottenere il nome host del computer (hostname è parte di un ingresso per generare un ID univoco). Sono scettico che questo restituirà il nome dell'host, quindi mi piacerebbe qualche prova.

Tutti gli esempi di codice sarebbe più utile.

Buon giorno.

È stato utile?

Soluzione

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

Non è un modo molto affidabile per determinare il nome host, anche se a volte può funzionare. (Cosa restituisce dipende da come /etc/hosts è impostato). Se si dispone di una linea simile a:

127.0.0.1    foobar    localhost

... poi tornerà "foobar". Se lo avete il contrario però, che è anche comune, allora sarà solo tornare "localhost". Un modo più affidabile è quello di utilizzare la funzione 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;
}

Altri suggerimenti

In C / UNIX, l'equivalente sarebbe qualcosa di simile:

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

e la prova che funziona:

$ hstnm localhost
Name: demon-a21pht

Ma provate voi stessi. A patto di avere l'ambiente corretto, dovrebbe andare bene.

ciò che è sbagliato?

  

h_name

     

Il nome ufficiale del host (PC). Se   utilizzando il DNS o risoluzione simile   sistema, è il Fully Qualified   Domain Name (FQDN) che ha causato la   server per restituire una risposta. Se si utilizza un   file degli host locali, è il primo   voce dopo l'indirizzo IPv4.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top