home   contents  previous      next        up

channel.h

Файл channel.h содержит объявления констант, типов и функций, используемых для манипулирования каналами.

Функция

Channel *ChanAlloc(void);

резервирует в куче память для канала, инициализирует его значением NotProcess_p. Она возвращает указатель на инициализированный канал в случае успешного выполнения, иначе результатом является NULL.

Функция

void ChanInit(Channel *chan);

инициализирует канал chan значением NotProcess_p.

Функция

int ChanReset(Channel *chan);

записывает в канал chan значение NotProcess_p и возвращает либо NotProcess_p, либо дескриптор процесса, ожидающего обмена посредством канала chan. Значение NotProcess_p возвращается, если нет процессов, ожидающих обмена по каналу chan, и все операции обмена данными успешно завершились.

Пример.

#include <channel.h>
#include <stdlib.h>
Channel c1, *c2, *c3;

ChanInit(&c1);
c2 = (Channel *) malloc( sizeof (Channel) );
ChanInit(c2);
if ( ( c3 = ChanAlloc() ) == NULL )
abort();

Функции ChanIn и ChanOut соответственно принимают и передают cnt байт данных посредством канала chan. Функция ChanIn сохраняет полученные данные в массиве, указываемом cp, а функция ChanOut берет данные из массива cp.

void ChanIn (Channel *chan, void *cp, int cnt);
void ChanOut (Channel *chan, void *cp, int cnt);

Функции

char ChanInChar (Channel *chan);
void ChanOutChar (Channel *chan, char ch);

принимают и передают один байт данных посредством канала *chan.

Функции

int ChanInInt (Channel *chan);
void ChanOutInt (Channel *chan, int n );

принимают и передают целое значение посредством канала chan.

Следующие функции аналогично функциям ChanIn и ChanOut принимают в массив cp или передают из него cnt байт данных, используя канал chan, но в отличие от них позволяют организовать надежный обмен данными по каналам. Функции ChanInChanFail и ChanOutChanFail можно аварийно завершить, передав целое и только целое значение по каналу failchan. Они возвращают 0, если обмен нормально завершен, и 1, если состояние ожидания обмена было прервано сообщением, поступившим по каналу failchan.

int ChanInChanFail (Channel *chan, void *cp, int cnt, Channel *failchan);
int ChanOutChanFail(Channel *chan, void *cp, int cnt, Channel *failchan);

Функции ChanInTimeFail и ChanOutTimeFail возвращают 0, если передача данных нормально завершена. Если канал не готов к вводу/выводу данных до наступления времени time, то функции аварийно завершаются и возвращают значение 1.

int ChanInTimeFail (Channel *chan, void *cp, int cnt, int time);
int ChanOutTimeFail(Channel *chan, void *cp, int cnt, int time);

Следующие константы описывают адреса линий связи транспьютера. Программа не должна явно использовать линии связи (их адреса), так как это может привести к ошибке. Линии связи должны назначаться каналам программы с помощью программы конфигуратор.

#define NotProcess_p 0x80000000
/* Адреса линий связи */
#define LINK0OUT ((Channel *) 0x80000000)
#define LINK1OUT ((Channel *) 0x80000004)
#define LINK2OUT ((Channel *) 0x80000008)
#define LINK3OUT ((Channel *) 0x8000000c)
#define LINK0IN ((Channel *) 0x80000010)
#define LINK1IN ((Channel *) 0x80000014)
#define LINK2IN ((Channel *) 0x80000018)
#define LINK3IN ((Channel *) 0x8000001c)
/* Адрес линии внешнего события */
#define EVENT ((Channel *) 0x80000020)


home   contents  previous      next        up