Читаем Операционная система UNIX полностью

int t_free(char *ptr, int struct_type);

Аргумент struct_type определяет, для какой структуры данных выделяется память. Он может принимать следующие значения:

Значение поля struct_typeСтруктура данных
T_BINDstruct t_bind
T_CALLstruct t_call
T_DISstruct t_discon
T_INFOstruct t_info
T_OPTMGMTstruct t_optmgmt
T_UNITDATAstruct t_unitdata
T_UDERRORstruct t_uderr

Co структурами, приведенными в таблице, мы познакомимся при обсуждении функций TLI. Большинство из них включают несколько элементов netbuf. Поскольку в некоторых случаях может отсутствовать необходимость размещения всех элементов netfuf, поле fields позволяет указать, какие конкретно буферы необходимо разместить для данной структуры:

Значение поля fieldsРазмещаемые и инициализируемые поля
T_ALLВсе необходимые поля
T_ADDRПоле addr в структурах t_bind, t_call, t_unitdata, t_uderr
T_OPTПоле opt в структурах t_call, t_unitdata, t_uderr, t_optmgmt
T_UDATAПоле udata в структурах t_call, t_unitdata, t_discon

Отметим одну особенность. Фактический размер буфера и, соответственно, структуры netbuf зависят от значения поля maxlen этой структуры. В свою очередь, этот параметр зависит от конкретного поставщика транспортных услуг — именно он определяет максимальный размер адреса, опций и прикладных данных. Чуть позже мы увидим, что эта информация ассоциирована с транспортным узлом и может быть получена после его создания с помощью функции t_open(3N). Поэтому для определения фактического размера размещаемых структур в функции t_аlloc(3N) необходим аргумент fd, являющийся дескриптором транспортного узла, который возвращается процессу функцией t_open(3N).

Перейдем к основным функциям TLI.

Как видно из рис. 6.18 и 6.19, в качестве первого этапа создания коммуникационного узла используется функция t_open(3N). Как и системный вызов open(2), она возвращает дескриптор, который в дальнейшем адресует узел в функциях TLI. Функция имеет вид:

#include

#include

int t_open(const char *path, int oflags, struct t_info *info);

Аргумент path является именем специального файла устройства, являющегося поставщиком транспортных услуг, например, /dev/tcp или /dev/udp. Аргумент oflags определяет флаги открытия файла и соответствует аналогичному аргументу системного вызова open(2). Приложение может получить информацию о поставщике транспортных услуг в структуре info, имеющей следующие поля:

Перейти на страницу:

Похожие книги