Trovare l'hostname del sistema in C
-
Usa la funzione
gethostname
per trovare l’hostname di sistema in C -
Usa la funzione
uname
per trovare l’hostname del sistema in C
Questo articolo spiegherà diversi metodi per trovare l’hostname di sistema in C.
Usa la funzione gethostname
per trovare l’hostname di sistema in C
La funzione gethostname
fa parte della specifica POSIX ed è usata per accedere al nome host del sistema. La funzione accetta due argomenti: char*
che punta a un buffer in cui verrà memorizzato il nome host recuperato e il numero di byte che indica la lunghezza del buffer. La funzione restituisce zero in caso di successo e -1 viene restituito in caso di errore. Si noti che è probabile che i sistemi POSIX abbiano un numero massimo di byte definito per la lunghezza del nome host, quindi l’utente deve allocare un buffer sufficientemente grande per memorizzare il valore recuperato.
#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);
}
Produzione:
Hostname: lenovo-pc
L’esempio precedente mostra la chiamata di base alla funzione gethostname
, ma si dovrebbero sempre implementare routine di segnalazione degli errori per garantire codice a prova di errore e messaggi di registrazione informativi. Poiché gethostname
imposta i valori errno
, possiamo valutarlo in un’istruzione switch
e stampare i messaggi corrispondenti nel flusso stderr
.
#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);
}
Produzione:
Hostname: lenovo-pc
Usa la funzione uname
per trovare l’hostname del sistema in C
In alternativa, si può utilizzare la chiamata alla funzione uname
per trovare il nome host del sistema. uname
può generalmente recuperare diversi punti dati sul sistema, vale a dire il nome del sistema operativo, la data di rilascio del sistema operativo e la versione, l’identificatore hardware e il nome host. Si noti, tuttavia, che uname
memorizza le informazioni di cui sopra in una struttura utsntheame
definita nel file di intestazione <sys/utsname.h>
. La funzione porta il puntatore alla struttura utsname
e restituisce il valore zero in caso di chiamata riuscita. uname
imposta anche errno
in caso di fallimento, e il valore EFAULT
è definito come un’indicazione quando il puntatore passato a una struttura utsname
non è valido.
#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);
}
Produzione:
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