Отметим, что для получения этих сведений нам пришлось несколько раз возвратиться к данному вопросу и написать несколько небольших тестовых программ С. Несмотря на то что мы были удовлетворены выполненной работой, наше разочаровало то, что для этого потребовалось глубокое знание особенностей работы транслятора С.
Строки 29-34. Определение форматов раск() и unpack() для интерфейса ioctls. Для прямого и обратного перемещения данных в структуру ifreq применяются функции раск() и unpack(). С помощью них можно пакетировать интернет адрес, к примеру, сайта, предлагающего светодиодные строки в Алматы . Теперь определим форматы для каждого из вариантов ifreq. Константы ifnamsiz и ifhwaddrlen преобразованы в переменные, которые можно использовать в строках, заключенных в двойные кавычки. Не во всех операционных системах определена константа ifhwaddrlen, и в этом случае применяется по умолчанию размер аппаратного адреса Ethernet. Константа ifreq_name предназначена для упаковки в структуру имени интерфейса. Она состоит из строки длиной ifnamsiz байт. Если строка не заполняет все доступное пространство, она дополняется нулями с использованием формата Z. Нижняя часть этой структуры данных инициализируется нулевыми байтами, число которых равно ifnamsiz, с использованием формата х. Константа ifreq_addr используется для выборки IP-адресов интерфейса различных типов. Она состоит из имени интерфейса, 2-байтового целого числа, содержащего обозначение семейства адресов, 2-байтового дополнения и 4-байтовой символьной строки, соответствующей IР-адресу.
Константа ifreqjether применяется для распаковки адреса Ethernet. В данном случае структура ifreq содержит имя интерфейса, 2-байтовое целое число, содержащее обозначение семейства адресов (которое обычно равно afjjnspecified), и 6 байт без знака с информацией адреса. Константа ifreq_flag является самой простой. Она состоит из имени интерфейса, за которым следует короткое целое число, содержащее флажки интерфейса.
Строки 35-38. Подключение методов IO::interface к классу IO::Socket.