Опрос идентифицирующих данных хостов
Самую общую информацию о характеристиках хоста позволяют получить служебная программа uname
uname [-snrvma]
и одноименная функция (см. листинг 10.1).
#include <sys/utsname.h> int uname (struct utsname *name);
Листинг 10.1. Описание функции uname (html, txt)
Функция uname( помещает информацию, идентифицирующую опрашиваемую систему, в структуру типа utsname, которая должна содержать по крайней мере следующие поля.
char sysname []; /* Имя реализации ОС */ char nodename []; /* Имя хоста как узла */ /* коммуникационной сети */ char release []; /* Номер выпуска ОС */ char version []; /* Номер версии ОС */ char machine []; /* Название аппаратной */ /* конфигурации */
Размер массивов не специфицируется, оговаривается только, что хранящиеся в них цепочки символов завершаются нулевым байтом.
Аналогичные данные выдает на стандартный вывод служебная программа uname, опции которой соответствуют полям структуры utsname (-m – выдать название аппаратной конфигурации, -n – имя узла, -s, -r и -v – имя реализации ОС, номера выпуска и версии, соответственно). Опция -a предписывает выдавать все; без опций выдается имя реализации.
Результат выполнения команды
uname -a
может выглядеть так, как показано в листинге 10.2. Правда, здесь фигурирует нестандартная составляющая, выдаваемая по опции -p, – тип процессора (в данном случае unknown).
Linux t94 2.4.18-3 #1 Thu Apr 18 07:37:53 EDT 2002 i686 unknown
Листинг 10.2. Возможный результат выполнения команды uname -a. (html, txt)
Функция gethostname() (см. листинг 10.3) возвращает в массиве name длины namelen имя хоста. Подходящее значение для namelen – HOST_NAME_MAX + 1 (см. следующий раздел).
#include <unistd.h> int gethostname (char *name, size_t namelen);
Листинг 10.3. Описание функции gethostname(). (html, txt)