ИМЯ¶
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