Документация по LinuxLinuxDoc.Ru 🔍

uname - получает название ядра и информацию о нем

НАЗВАНИЕ
uname - получает название ядра и информацию о нем

СИНТАКСИС
#include

int uname(struct utsname *buf);

ОПИСАНИЕ
uname возвращает информацию о системе в структуру с
адресом buf. Структура utsname определена в
следующим образом:
struct utsname {
char sysname[];
char nodename[];
char release[];
char version[];
char machine[];
char domainname[];
};
Длина массивов в struct utsname не указана; все поля
оканчиваются символом NUL.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При удачном завершении работы функции возвращается 0. При
ошибке возвращается -1, а переменной errno присваивается
номер ошибки.

КОДЫ ОШИБОК
EFAULT Неверное значение buf.

СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, SVID, POSIX, X/OPEN. В BSD 4.3 вызов uname
отсутствует.

Поле domainname (домен NIS или YP) является расширением,
предложенным GNU.

ЗАМЕЧАНИЯ
Это системный вызов, и операционная система,
предположительно, знает свое имя, номер выпуска и версию.
Она также знает на каком аппаратном обеспечении она
работает. Таким образом четыре поля структуры несут
полезную информацию. С другой стороны, поле nodename ее не
несет: оно указывает имя машины в некой неопределенной
сети, но обычно машины находятся в более чем одной сети и
имеют несколько имен. Более того, ядро не может
каким-либо образом получить информацию о таких вещах,
поэтому ему необходимо сообщить что же возвращать в этом
поле. То же относится и к дополнительному полю domainname.

С этой целью в Linux используются системные вызовы
sethostname(2) и setdomainname(2). Обратите внимание, что
хотя не существует стандарта, который бы указывал, что имя
машины, установленное sethostname(2), является той же
строкой, что возвращается в поле nodename при вызове
uname, но для Linux это именно так (в действительности
некоторые системы позволяют 256-символьное hostname и
8-символьное nodename). То же относится и к setdomain-
name(2) и полю domainname.

Длина полей в структуре может быть различна. Некоторые
операционные системы или библиотеки используют жестко
прошитые значения 9, 33, 65 или 257. Другие используют
константы SYS_NMLN, _SYS_NMLN, UTSLEN или _UTSNAME_LENGTH.
Несомненно, идея использовать эти константы не очень
хороша - можно просто использовать sizeof(...). Часто
выбирается 257 для того, чтобы имелось достаточно места
для хранения имени машины в сети internet.

В Linux имелось три системных вызова uname(). Первый
использовал длину 9, второй - 65, а третий также
использовал 65, но добавлял поле domainname.

Часть информации из структуры utsname может быть получена
также через sysctl и через /proc/sys/kernel/{ostype, host-
name, osrelease, version, domainname}.
Читать новости Linux в Telegram
Linux - uname - получает название ядра и информацию о нем
Мы в соцсетях ✉