uname
1. uname.2.man
Manpage of UNAME
UNAME
Section: Руководство программиста Linux (2)Updated: 2008-12-03
Index Return to Main Contents
ИМЯ
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 (aq\0aq).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.ОШИБКИ
- EFAULT
- Значение buf не определено.
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, POSIX.1-2001. Вызов 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}.
Ядерный интерфейс, лежащий в основе
Со временем, увеличение размера структуры 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)
Index
This document was created by man2html using the manual pages.
Time: 17:42:05 GMT, May 11, 2012




