Scroll to navigation

UNAME(2) Linux Programmer's Manual UNAME(2)

NOME

uname - restituisce nome e informazioni sul kernel attuale

SINTASSI

#include <sys/utsname.h>

int uname(struct utsname *buf);

DESCRIZIONE

uname() restituisce informazioni sul sistema attraverso il puntatore R buf . La struttura utsname è definita in R <sys/utsname.h> :

struct utsname {

char sysname[]; /* Nome del sistema operativo (per esempio "Linux") */
char nodename[]; /* Nome all'interno di "qualche rete definita
dall'implementazione" */
char release[]; /* rilascio del SO (per esempio "2.6.28") */
char version[]; /* versione del SO */
char machine[]; /* identificatore hardware */ #ifdef _GNU_SOURCE
char domainname[]; /* nome di dominio NIS o YP */ #endif };

La lunghezza degli array in una struttura utsname non è specificata (vedere NOTE); i campi sono terminati con un byte nullo ('\0').

VALORE RESTITUITO

In caso di esito positivo viene restituito zero, altrimenti -1 e errno viene impostato di conseguenza.

ERRORI

buf non è valido.

CONFORME A

SVr4, POSIX.1-2001. Non c'è alcuna chiamata a uname() in 4.3BSD.

Il membro domainname (il nome di dominio NIS o YP) è un'estensione GNU.

NOTE

Questa è una chiamata di sistema, e si presume che il sistema operativo sappia il suo nome, rilascio e versione. Esso inoltre sa su quale hardware funziona. Quindi quattro dei campi della struttura sono significativi. D'altra parte il campo nodename è insignificante: esso dà il nome della macchina presente in qualche rete indefinita, ma tipicamente le macchine si trovano in più di una rete e hanno più nomi. Inoltre il kernel non ha modo di sapere queste cose, quindi bisogna dirgli cosa rispondere. Lo stesso vale per il campo aggiuntivo domainname.

A questo scopo Linux usa le chiamate di sistema sethostname(2) e setdomainname(2). Notare che non c'è alcuno standard che dica che il nome host impostato da sethostname(2) è la stessa stringa del campo nodename della struttura restituita da uname() (in verità, alcuni sistemi permettono un nome host di 256 byte e un nome nodo di 8 byte), ma ciò è vero in Linux. Lo stesso vale per setdomainname(2) e per il campo domainname.

La lunghezza dei campi nella struttura varia. Alcuni sistemi operativi o librerie usano un valore prefissato 9 o 33 o 65 o 257. Altri sistemi usano SYS_NMLN o _SYS_NMLN o UTSLEN o _UTSNAME_LENGTH. E' chiaramente una pessima idea usare una qualunque di queste costanti; si usi solo sizeof(...). Spesso si sceglie 257 per avere spazio per un nome di host internet.

Parte dell'informazione utsname è anche accessibile attraverso R /proc/sys/kernel/ { ostype , R hostname , R osrelease , R version , R domainname }.

Interfaccia del kernel sottostante

Col tempo, aumenti nella dimensione della struttura utsuname hanno portato a tre versioni successive di uname(): R sys_olduname () (slot R __NR_oldolduname ), R sys_uname () (slot R __NR_olduname ), e R sys_newuname () (slot R __NR_uname). La prima usava la lunghezza 9 per tutti i campi; la seconda usava 65; anche la terza usava 65, aggiungendo però il campo domainname. La funzione wrapper di glibc, uname(), nasconde questi dettagli alle applicazioni, invocando la versione più recente della chiamata di sistema fornita dal kernel.

VEDERE ANCHE

uname(1), getdomainname(2), gethostname(2)

COLOPHON

Questa pagina fa parte del rilascio 3.15 del progetto man-pages di Linux. Si può trovare una descrizione del progetto, e informazioni su come riportare bachi, presso http://www.kernel.org/doc/man-pages/. Per la traduzione in italiano si può fare riferimento a http://www.pluto.it/ildp/collaborare/

3 dicembre 2008 Linux