Frage
Ich weiß nicht, wie Anwendungen in C zu schreiben, aber ich brauche ein kleines Programm, das tut:
lh = gethostbyname("localhost");
output = lh->h_name;
Ausgangsgröße gedruckt werden soll.
Der obige Code ist in PHP MongoDB-Datenbanktreiber verwendet, um die Hostnamen des Computers zu erhalten (Hostname Teil eines Eingangs ist eine eindeutige ID zu erzeugen). Ich bin skeptisch, dass dies den Host-Namen zurückgeben, so dass ich einen Beweis möchte.
Jede Codebeispiele wäre sehr hilfreich.
Happy Tag.
Lösung
#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;
}
Es ist nicht ein sehr zuverlässiger Weg, um die Hostnamen zu bestimmen, obwohl es manchmal funktioniert. (Was es gibt, hängt ab, wie /etc/hosts
eingerichtet ist). Wenn Sie eine Zeile wie:
127.0.0.1 foobar localhost
... dann wird es zurückgeben "foobar". Wenn Sie es anders herum, obwohl haben, die auch üblich ist, dann wird es nur zurückgeben „localhost“. Eine zuverlässigere Art und Weise ist die gethostname()
-Funktion:
#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;
}
Andere Tipps
In C / UNIX, wäre das Äquivalent so etwas wie:
#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;
}
und der Beweis, dass es funktioniert:
$ hstnm localhost
Name: demon-a21pht
Aber versuchen Sie es selbst. Vorausgesetzt, Sie haben die richtige Umgebung haben, sollte es in Ordnung sein.
was ist falsch?
h_name
Der offizielle Name des Hosts (PC). Wenn unter Verwendung der DNS oder ähnliche Auflösung System ist es das Fully Qualified Domain Name (FQDN), die das verursacht Server eine Antwort zurück. Wenn ein mit lokale hosts-Datei, ist es das erste Eintrag nach der IPv4-Adresse.