Выделение памяти под TLI-структуры
Динамическое выделение оперативной памяти под различные структуры данных, используемые TLI, удобно осуществлять функцией t_alloc, имеющей следующий вид
#include <tiuser.h>
char *t_alloc (fd, structType, fields)
int fd;
int structType;
int fields;
Аргумент fd задает дескриптор ранее созданной функцией t_open транспортной точки.
Аргумент structType задает тип структуры данных, под которую необходимо выделить память, и может принимать следующие значения:
T_INFO для struct t_info;
T_BIND для struct t_bind;
T_CALL для struct t_call;
T_UNITDATA для struct t_unitdata;
T_DIS для struct t_discon и др.
Каждая из указанных структур (исключая struct t_info) содержит одно или несколько полей типа struct netbuf. Для каждого из таких полей можно также потребовать динамического выделения памяти. Аргумент fields конкретизирует это требование, допуская задание fields в виде побитового ИЛИ из следующих значений:
T_ALL для выделения памяти для всех полей типа struct netbuf, имеющихся в структуре;
T_ADDR для поля addr;
T_UDATA для поля udata;
T_OPT для поля opt.
При успешном завершении функция возвращает указатель на размещенную структуру данных, в противном случае - NULL.
Освобождение памяти
Для освобождения оперативной памяти, динамически выделенной под различные структуры данных, используемые TLI, удобно использовать функцию t_free, имеющую следующий вид
#include<tiuser.h>
int t_free (ptr, structType)
char *ptr;
int structType;
Аргумент ptr указывает освобождаемую область памяти.
Аргумент structType задает тип структуры данных, занимающей память. Этот аргумент может принимать те же значения, что и аналогичный аргумент функции t_alloc.
Функция t_free освобождает оперативную память, занятую собственно структурой и всеми ее буферами типа struct netbuf.
При успешном завершении функция t_free возвращает ноль, иначе - число "-1" и устанавливает код ошибки в глобальной переменной t_errno.