System-Hostname in C finden
-
Verwenden Sie die Funktion
gethostname
, um den System-Hostnamen in C zu finden -
Verwendung der Funktion
uname
zum Ermitteln des System-Hostnamens in C
Dieser Artikel erklärt mehrere Methoden, wie man den System-Hostnamen in C finden kann.
Verwenden Sie die Funktion gethostname
, um den System-Hostnamen in C zu finden
Die Funktion gethostname
ist Teil der POSIX-Spezifikation und wird verwendet, um auf den System-Hostnamen zuzugreifen. Die Funktion nimmt zwei Argumente entgegen: char*
, das auf einen Puffer zeigt, in dem der abgefragte Hostname gespeichert wird, und die Anzahl der Bytes, die die Länge des Puffers angibt. Die Funktion gibt bei Erfolg Null zurück, bei einem Fehler wird -1 zurückgegeben. Beachten Sie, dass POSIX-Systeme wahrscheinlich eine maximale Anzahl von Bytes für die Länge des Hostnamens definiert haben, so dass der Benutzer einen Puffer zuweisen sollte, der groß genug ist, um den abgerufenen Wert zu speichern.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
enum { MAX_SIZE = 256 };
int main(void) {
int ret;
char hostname[MAX_SIZE];
ret = gethostname(&hostname[0], MAX_SIZE);
if (ret == -1) {
perror("gethostname");
exit(EXIT_FAILURE);
}
printf("Hostname: %s\n", hostname);
exit(EXIT_SUCCESS);
}
Ausgabe:
Hostname: lenovo-pc
Das vorige Beispiel demonstriert den grundlegenden Aufruf der Funktion gethostname
, aber man sollte immer Fehlerberichtsroutinen implementieren, um einen ausfallsicheren Code und informative Protokollierungsmeldungen zu gewährleisten. Da die Funktion gethostname
errno
-Werte setzt, können wir sie in einer switch
-Anweisung auswerten und die entsprechenden Meldungen in den stderr
-Stream ausgeben.
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
enum { MAX_SIZE = 256 };
int main(void) {
int ret;
char hostname[MAX_SIZE];
errno = 0;
ret = gethostname(&hostname[0], MAX_SIZE);
if (ret == -1) {
switch (errno) {
case EFAULT:
fprintf(stderr, "'name' argument is an invalid address");
break;
case EINVAL:
fprintf(stderr, "'len' argument is negative");
break;
default:
perror("gethostname");
}
exit(EXIT_FAILURE);
}
printf("Hostname: %s\n", hostname);
exit(EXIT_SUCCESS);
}
Ausgabe:
Hostname: lenovo-pc
Verwendung der Funktion uname
zum Ermitteln des System-Hostnamens in C
Alternativ kann man auch den Funktionsaufruf uname
verwenden, um den System-Hostnamen zu finden. uname
kann im Allgemeinen mehrere Datenpunkte über das System abrufen, nämlich den Betriebssystemnamen, das Veröffentlichungsdatum und die Version des Betriebssystems, die Hardware-Kennung und den Hostnamen. Beachten Sie jedoch, dass uname
die oben genannten Informationen in einer utsntheame
-Struktur speichert, die in der Header-Datei <sys/utsname.h>
definiert ist. Die Funktion nimmt den Zeiger auf die utsname
-Struktur und gibt bei einem erfolgreichen Aufruf den Wert Null zurück. Außerdem setzt uname
im Fehlerfall errno
, und der Wert EFAULT
ist als Hinweis definiert, wenn der übergebene Zeiger auf eine utsname
-Struktur ungültig ist.
#include <stdio.h>
#include <stdlib.h>
#include <sys/utsname.h>
enum { MAX_SIZE = 256 };
int main(void) {
struct utsname uts;
if (uname(&uts) == -1) perror("uname");
printf("Node name: %s\n", uts.nodename);
printf("System name: %s\n", uts.sysname);
printf("Release: %s\n", uts.release);
printf("Version: %s\n", uts.version);
printf("Machine: %s\n", uts.machine);
exit(EXIT_SUCCESS);
}
Ausgabe:
Hostname: lenovo-pc
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook