9
votes

Linux C - Obtenez le nom d'hôte du serveur?

Est-ce que quelqu'un connaît une fonction pour obtenir le nom d'hôte du serveur Linux? Je ne veux pas vraiment avoir à inclure des en-têtes ou compiler d'autres bibliothèques, en espérant qu'il existe une fonction intégrée par défaut. Je suis nouveau pour C:)

c

1 commentaires

Aucune fonction intégrée dans C. Vous devrez inclure des en-têtes et / ou des bibliothèques de liaison. Parlez-vous du serveur en cours d'exécution sur votre machine ou une autre?


3 Réponses :


29
votes

comme gethostname () ?

C'est le nom de la machine sur laquelle Votre application est en cours d'exécution. p>

ou lisez à partir de p> xxx pré>

update strong> p>

Exemple simple P >

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void) {

    char hostname[1024];
    gethostname(hostname, 1024);

    puts(hostname);

    return EXIT_SUCCESS;
}


3 commentaires

Pouvez-vous fournir un exemple de comment l'imprimer à l'écran? Ne riez pas, mais j'ai essayé les erreurs suivantes et Ça des erreurs :) int gethostname (Char * Nom, Taille_T Len); printf ("% s \ n", nom);


Vous devez passer Tailleof (nom d'hôte) -1 comme longueur sur gethostname () . Sinon, vous risquez de vous retrouver sans terminaison null si la troncature se produit. Selon mon MANPAGE: "POSIX.1 dit que si une telle troncature se produit, il n'est pas spécifié de savoir si le tampon retourné comprend un octet nul de terminaison."


@scai Pour que cela puisse faire de bien, vous souhaitez également vous assurer que HostName [1023] est NULL. Dans ce cas, vous pouvez continuer à passer tailleof (nom d'hôte) à celui-ci puis définir hostname [1023] à null après gethostname () Retour.



0
votes

Certaines informations utiles peuvent être trouvées parmi les variables d'environnement. Vous devrez inclure (malheureusement) stdlib.h et vous obtiendrez certaines fonctions utiles


2 commentaires

Pourquoi est-ce malheureux? Y compris les en-têtes est obligatoire dans C. Est-ce que j'ai gâté le mémo qui dit que c'est une mauvaise chose?


Parce que Joe ne voulait pas inclure de bibliothèques!



2
votes

Construire sur la réponse de Alain Pannetier, vous pouvez épargner quelques octets à l'aide de Host_Name_max:

#include <limits.h>
...
  char hostname[HOST_NAME_MAX+1];
  gethostname(hostname, HOST_NAME_MAX+1);
...


0 commentaires