Теория и практика программирования на Си в Unix


Функции локального управления


- Управление ошибками
void t_error (message) char *message; Этот примитив выводит сообщение об ошибке, состоящее из значения глобальной переменной t_errno, которому предшествует сообщение, определяемое пользователем.

- Управление памятью
Эти функции позволяют динамически выделять и освобождать память, связанную со структурами, используемыми другими функциями.
char *t_alloc (fd, structype, fields)
int fd; /*точка доступа транспортной службы*/
int structype; /*тип, связанный со структурой*/
int fields; /*поля структур netbuf*/
int t_free (ptr, structype)
char *ptr; /*указатель структуры*/
int structype; /*тип, связанный со структурой*/

Значения, связанные с параметром structype определены в таблице 5.1. Значения, связанные с параметром fields определены в таблице 5.2. Можно сделать дизъюнкцию всех этих значений, самое простое - это использовать T_ALL.

Таблица 5.1. Значения параметра structype.

sructype Тип структуры

T_BIND

struct t_bind

T_CALL

struct t_call

T_DIS

struct t_diskon

T_INFO

struct t_info

T_OPTMGMT

struct t_optmgt

T_UNITDATA struct t_unitdata

T_UDERROR

struct t_udder

Таблица 5.2. Значения параметра fields

fields Поля структур netbuf

резервированные и инициализированные

T_ALL

все

T_ADDR

addr

T_OPT

opt

T_UDATA

udata

- Создание точки доступа транспортной службы
int t_open (path, oflag, pinfo)
char *path; /*имя, связанное с транспортной службой*/
int oflag; /*флаг: аналогично файлу open ()*/
struct t_info *pinfo /*информация о трансп. службе*/

Структура t_info cодержит, при возврате, следующую информа- цию:
struct t_info {
long addr; /*максимальный адрес транспортной службы*/
long options; /*максимальная величина транспортных опций*/
long tsdu; /*максимальная длина TSDU = transport service data unit*/
long etsdu; /*максимальная длина ETSDU = expedited transport data unit*/
long connect; /*максимальная длина данных, которую можно передать при запросе соединения*/
long discon; /*максимальная длина данных, которую можно передать при рассоединении*/
long servtypr; /*тип поддерживаемой службы, либо T_COS: услуги, ориентированные на соединение с согласованным разъединением. T_COS_ORD: услуги ориентированные на соединение с согласованным разъединением. T_CLTS: услуги без соединения.*/
};
В качестве параметра выдается ссылка на специальный файл UNIX (из каталога /dev) , через который можно обеспечить дос- туп к отдельной службе (пример: /dev/tcp для транспортной службы TCP). Можно задать значение NULL в параметре pinfo, если нет необ- ходимости в получении информации об использованной транспорт-ной службе. Примитив посылает дескриптор точки доступа в транспортную службу, которую могут использовать другие функции.

ПРОГРАММА 39 /* опции, управляемые транспортным уровнем dev/tcp #include "tli.h" /* обращение к программе транспортной службы и вывод на экран параметров конфигурации */ main() { char name[] = "/dev/tcp" ; int tfd; /* дескриптор доступа к службе struct t_info info; /* информационная структура /* создание точки входа в транспортный уровень tfd = t_open(name, O_RDWR, &info); /* вывод на экран параметров конфигурации : последовательность printf(), выводящих на экран элементы структуры info .................. } - Binding (связывание) int t_bind (fd, prequest, preturn) int fd; /* точка доступа транспортной службы*/ struct t_bind *prequest /* посылаемый адрес*/ struct t_bind *preturn /* возвращаемый адрес*/ Структура t_bind cодержит следующую информацию: struct t_bind { struct netbuf addr; /*адрес*/ unsigned int qlen; /*максимальное число одновременных соединений*/ };




- Начало -  - Назад -  - Вперед -