uname - Obtenir des informations à propos du noyau.
uname
renvoient les informations dans le buffer
buf.
la structure
utsname
est définie dans
<sys/utsname.h>
comme suit :
-
struct utsname {
char sysname[];
char nodename[];
char release[];
char version[];
char machine[];
#ifdef _GNU_SOURCE
char domainname[];
#endif
};
La longueur des chaînes de la
struct utsname
n'est pas spécifiée, les champs se terminent par un caractère NUL.
Ceci est un appel système, et le système d'exploitation est supposé connaître
son nom, et ses numéros de version et de mise à jour. Il connaît également le matériel
sur lequel il tourne, ainsi les quatre premiers champs de la structures sont significatifs.
En revanche, le champ
nodename n'est pas significatif :
il donne le nom de la machine dans un réseau non précisé, mais généralement
les machines sont connectées à plusieurs réseaux et ont plusieurs noms.
De plus, le noyau n'a pas de moyen de connaître ces informations, et on doit
les lui fournir. Ceci est vrai aussi pour le champ supplémentaire
domainname.
A cette fin, Linux utilise les appels système
sethostname(2)
et
setdomainname(2).
Notez qu'aucun standard ne dit que le nom d'hôte fixé par
sethostname(2)
représente la même chaîne que le champ
nodename de la structure
renvoyée par uname,
(de fait, certains systèmes autorise un nom d'hôte de 256 octets et un nom
de noeud sur 8 octets), mais c'est le cas sous Linux.
La même chose est vraie pour
setdomainname(2)
et le champ
domainname.
La longueur des champs de la structure varie. Certains systèmes d'exploitation
ou bibliothèques utilise des valeurs en dur de 9, 33, 65, ou 257. D'autres systèmes
utilisent SYS_NMLN, _SYS_NMLN, UTSLEN ou _UTSNAME_LENGTH.
Clairement, il faut éviter d'utiliser ces constantes, employez plutôt sizeof(...).
On choisit souvent la valeur 257 qui permet de stocker un nom d'hôte Internet entier.
Il y a eu trois appels système
uname sous Linux. Le premier utilisait
une longueur de 9, le second de 65 et le troisième utilise également 65
mais ajoute le champ
domainname.
Une partie des informations utsname est aussi accessible par
sysctl
et par
/proc/sys/kernel/{
ostype,
hostname,
osrelease,
version,
domainname}.
Christophe Blaess, 1996-2003.