Операционная система UNIX
Операционная система UNIX читать книгу онлайн
Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.
В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).
Для широкого круга пользователей.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
char *t_alloc(int fd, int struct_type, int fields);
int t_free(char *ptr, int struct_type);
Аргумент
struct_type
Значение поля struct_type | Структура данных |
---|---|
T_BIND | struct t_bind |
T_CALL | struct t_call |
T_DIS | struct t_discon |
T_INFO | struct t_info |
T_OPTMGMT | struct t_optmgmt |
T_UNITDATA | struct t_unitdata |
T_UDERROR | struct 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
fd
Перейдем к основным функциям TLI.
Как видно из рис. 6.18 и 6.19, в качестве первого этапа создания коммуникационного узла используется функция t_open(3N). Как и системный вызов open(2), она возвращает дескриптор, который в дальнейшем адресует узел в функциях TLI. Функция имеет вид:
#include <tiuser.h>
#include <fcitl.h>
int t_open(const char *path, int oflags, struct t_info *info);
Аргумент
path
oflags
info
addr | Определяет максимальный размер адреса транспортного протокола. Значение -1 говорит, что размер не ограничен, -2 означает, что прикладная программа не имеет доступа к адресам протокола. Протокол TCP устанавливает размер этого адреса (адрес порта) равным 16. |
options | Определяет размер опций для данного протокола. Значение -1 свидетельствует, что размер не ограничен, -2 означает, что прикладная программа не имеет возможности устанавливать опции протокола. |
tsdu | Определяет максимальный размер пакета данных протокола (Transport Service Data Unit, TSDU). Нулевое значение означает, что протокол не поддерживает пакетную передачу (т.е. не сохраняет границы записей). Значение -1 свидетельствует, что размер не ограничен, -2 означает, что передача обычных данных не поддерживается. Поскольку протокол TCP обеспечивает передачу неструктурированного потока данных, значение tsdu |
etsdu | Определяет максимальный размер пакета экстренных данных протокола (Expedited Transport Service Data Unit, ETSDU). Нулевое значение означает, что протокол не поддерживает пакетную передачу (т.е. не сохраняет границы записей). Значение -1 свидетельствует, что размер не ограничен, -2 означает, что передача экстренных данных не поддерживается. TCP обеспечивает такую поддержку, а UDP — нет. |
connect | Некоторые протоколы допускают передачу прикладных данных вместе с запросом на соединение. Поле connect определяет максимальный размер таких данных. Значение -1 свидетельствует, что размер не ограничен, -2 означает, что данная возможность не поддерживается. И TCP и UDP не поддерживают этой возможности. |
discon | Определяет то же, что и connect |
servtype | Определяет тип транспортных услуг, предоставляемых протоколом. Значение T_COTS T_COTS_ORD T_CLTS T_COTS_ORD T_CLTS |