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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top