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.
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.