Scroll to navigation

UNAME(2) Руководство программиста Linux UNAME(2)

ИМЯ

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

СИНТАКСИС

#include <sys/utsname.h>

int uname(struct utsname *buf);

ОПИСАНИЕ

uname() возвращает информацию о системе в структуру с адресом buf. Структура utsname определена в <sys/utsname.h>:


struct utsname {

char sysname[]; /* название операционной системы
(например, «Linux») */
char nodename[]; /* имя в сети, зависящее от реализации */
char release[]; /* идентификатор выпуска ОС (например, «2.6.28») */
char version[]; /* версия ОС */
char machine[]; /* идентификатор аппаратного обеспечения */ #ifdef _GNU_SOURCE
char domainname[]; /* доменное имя NIS или YP */ #endif };

Размеры массивов в struct utsname не определены (см. ЗАМЕЧАНИЯ); поля завершаются байтом с null ('\0').

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.

ОШИБКИ

Значение buf не определено.

СООТВЕТСТВИЕ СТАНДАРТАМ

POSIX.1-2001, POSIX.1-2008, SVr4. Вызов uname() отсутствует в 4.3BSD.

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

ЗАМЕЧАНИЯ

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

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

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

Часть информации из структуры utsname может быть получена также через /proc/sys/kernel/ {ostype, hostname, osrelease, version, domainname}.

Отличия между библиотекой C и ядром

Со временем, увеличение размера структуры utsname последовательно привело к трём версиям uname(): sys_olduname() (слот __NR_oldolduname), sys_uname() (слот __NR_olduname) и sys_newuname() (слот __NR_uname). В первой длина каждого поля равна 9; во второй 65; в третьей также 65, но добавилось поле domainname. Обёрточная функция uname() в glibc скрывает эти подробности от приложений, вызывая самую новую версию системного вызова, предоставляемого ядром.

СМ. ТАКЖЕ

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

ЗАМЕЧАНИЯ

Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy Ovchinnikov <dmitriyxt5@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Katrin Kutepova <blackkatelv@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.

10 октября 2019 г. Linux