Существует несколько порций полезной информации о системе, которая может понадобиться программе. Например, название и версия операционной системы могут служить для определения функциональности, предлагаемой системными программами.
Системный вызов uname()
позволяет программе обнаружить информацию времени ее выполнения.
#include
int uname(struct utsname* unameBuf);
В случае ошибки функция возвращает ненулевое значение, что происходит только в ситуациях, когда передается недопустимый указатель unameBuf
. При нормальном завершении структура, на которую он указывает, заполняется строками, завершаемыми NULL
, которые описывают текущую систему. В табл. 6.1 представлены члены структуры utsname
.
Таблица 6.1. Члены структуры utsname
Член |
Описание |
sysname |
Название операционной системы (в данном случае Linux ). |
release |
Номер версии выполняющегося ядра. Это полная версия вроде 2.6.2 . Номер может быть легко изменен тем, кто выполнял сборку ядра, и вполне возможно, что цифр будет больше трех. Во многих версиях можно встретить дополнительную цифру для описания примененных исправлений, например, 2.4.17-23 . |
version |
Под Linux здесь содержится временная метка, описывающая время, когда собиралось ядро. |
machine |
Короткая строка, указывающая тип микропроцессора, на котором работает операционная система. Для Pentium Pro или более мощных она может быть i686 , для процессоров класса Alpha — alpha , а для 64-разрядных процессоров PowerPC — ррс64 . |
nodename |
Имя хоста машины, которое обычно является первичным именем хоста в Internet. |
domainname |
Домен NIS (или YP), которому принадлежит машина. |
Член nodename
(имя узла) часто называется системным именем хоста (то, что отображает команда hostname
), однако его не следует путать с именем Internet-хоста. Несмотря на то что во многих системах эти члены не различаются, путать их не стоит. В системе с множеством Internet-адресов есть множество имен Internet-хостов, но только одно имя узла, поэтому эти имена не являются эквивалентными.
Более распространенная ситуация связана с домашними компьютерами, которые используют Internet-каналы широкополосной связи. Обычно их имя хоста в Internet выглядит вроде host127-56.raleigh.myisp.com
, а имена Internet-хостов меняются каждый раз при отключении на длительное время от модема [6] Большинство, но не все, поставщики услуг доступа в Internet назначают динамические IP-адреса, а не статические.
. Владельцы этих машин дают своим компьютерам имя узла, которое им больше нравится, например, loren
или eleanor
, что совершенно не относится к адресам Internet. При наличии множества машин, работающих на одном домашнем шлюзе, все они будут разделять один Internet-адрес (и одно имя Internet-хоста), но могут иметь имена вроде Linux.mynetwork.org
и freebsd.mynetwork.org
, которые все еще не являются именами Internet-хоста. В связи со всеми вышеперечисленными причинами, предполагать, что имя системного узла является допустимым именем Internet-хоста для машины не верно.
Имя узла системы устанавливается с помощью системного вызова sethostname()
[7] Несмотря на имя, которое может ввести в заблуждение, этот системный вызов устанавливает имя узла, а не имя Internet-хоста машины.
, и имя домена NIS (YP) [8] Сетевые информационные службы (Network Information Services — NIS) предоставляют для машин в сети механизм совместного использования информации, такой как пользовательские имена и пароли. Ранее они назывались "желтыми страницами" (Yellow Pages — YP). Имя домена NIS — часть этого механизма, который реализуется за пределами ядра системы с тем исключением, что доменное имя хранится в структуре utsname .
— посредством системного вызова setdomainname()
.
#include
int sethostname(const char * name, size_t len);
int setdomainname(const char * name, size_t len);
Оба этих системных вызова принимают указатель на строку (не обязательно завершающуюся NULL
), которая содержит подходящее имя, и целочисленный аргумент, указывающий размер строки.
Приложения, которые скомпилированы с заголовочными файлами из библиотеки glibc
и привязанные к одной из ее версий, будут работать и с более поздними версиями библиотеки. Эта обратная совместимостьобычно означает, что программисту не придется пересобирать свои приложения только из-за того, что выпущена новая версия glibc
.
Читать дальше