Question

Je ne sais pas comment écrire des applications en C, mais je besoin d'un petit programme qui fait:

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

variable de sortie doit être imprimée.

Le code ci-dessus est utilisé dans le pilote de base PHP MongoDB pour obtenir le nom d'hôte de l'ordinateur (nom d'hôte fait partie d'une entrée pour générer un identifiant unique). Je suis sceptique que cela retournera le nom d'hôte, donc je voudrais une preuve.

Les exemples de code serait très utile.

Bonne journée.

Était-ce utile?

La solution

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

Il est pas une façon très fiable pour déterminer le nom d'hôte, mais il peut parfois fonctionner. (Ce qu'elle retourne dépend de la façon dont /etc/hosts est mis en place). Si vous avez une ligne comme:

127.0.0.1    foobar    localhost

... alors il retournera "foobar". Si vous avez l'inverse cependant, qui est aussi commun, alors il sera juste retour « localhost ». Une façon plus fiable est d'utiliser la fonction 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;
}

Autres conseils

Dans C / UNIX, l'équivalent serait quelque chose comme:

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

et la preuve que cela fonctionne:

$ hstnm localhost
Name: demon-a21pht

Mais essayez vous-même. Pourvu que vous avez l'environnement correct, il devrait être très bien.

ce qui est faux?

  

h_name

     

Le nom officiel de l'hôte (PC). Si   en utilisant le DNS ou une résolution similaire   système, il est pleinement qualifié   Nom de domaine (FQDN) qui a causé la   serveur pour retourner une réponse. Si vous utilisez un   fichier hosts local, il est le premier   entrée après l'adresse IPv4.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top