uname

Autres langues

Langue: ru

Autres versions - même langue

Version: 2001-12-15 (fedora - 25/11/07)

Autres sections - même nom

Section: 2 (Appels système)

ИМЯ

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

ОБЗОР

#include <sys/utsname.h>

int uname(struct utsname *buf);

ОПИСАНИЕ

uname возвращает системную информацию в структуре, на которую указывает buf. Структура utsname определяется в <sys/utsname.h>:
 struct utsname {
 char sysname[];
 char nodename[];
 char release[];
 char version[];
 char machine[];
 #ifdef _GNU_SOURCE
 char domainname[];
 #endif
 };
 
Длина массива в struct utsname не задаётся; поля завершаются нулевым символом.

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

В случае успеха возвращается ноль. В случае ошибки возвращается -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 (в самом деле, некоторые системы разрешают 256-байтовые имена узлов и только 8-байтовые nodename), но это так в Linux. Это же касается и вызова setdomainname(2) и поля domainname.

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

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

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

СМОТРИ ТАКЖЕ

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

ПЕРЕВОД

Перевёл с английского Виктор Вислобоков <corochoone@perm.ru> 2004