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:) P>
3 Réponses :
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> 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;
}
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 code> comme longueur sur gethostname () code>. 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] code> est NULL. Dans ce cas, vous pouvez continuer à passer tailleof (nom d'hôte) code> à celui-ci puis définir hostname [1023] code> à null après gethostname () code> Retour.
Certaines informations utiles peuvent être trouvées parmi les variables d'environnement. Vous devrez inclure (malheureusement) stdlib.h code> et vous obtiendrez certaines fonctions utiles p>
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!
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); ...
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?