Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции - Чернышева.doc
Скачиваний:
7
Добавлен:
13.11.2019
Размер:
1.03 Mб
Скачать

Функции необходимые для асинхронного обмена данными

Прототипы функций находится в следующем заголовочном файле:

#include <sys/topology.h>

  1. int NewTop (int nLinks);

Функция NewTop реализует новую топологию. Она создает внутреннюю топологическую таблицу с nLinks, как предполагаемым числом линков.

Функция возвращает переменную целого типа, которая идентифицирует новую топологию.

  1. int FreeTop (int TopID);

Функция FreeTop освобождает топологию с идентификатором TopID. Она освобождает все каналы т связи.

Функция возвращает 0 в случае удачного завершения или отрицательное число как код ошибки.

  1. int AddTop (int TopID, LinkCB_t*Link);

Функция AddTop в топологии с идентификаторм TopID каналу связи Link ставит в соответствие некоторое число, которое является логическим именем данного канала связи.

#include <sys/comm.h>

  1. int AIint (int TopID, int Threads, int size);

Функция AIint инициализирует поля структур, использующих функции асинхронного обмена.

  • TopID – идентификатор топологии;

  • Threads – максимальное число потоков использующихся в асинхронном обмене. Если Threads= -1, то “нет ограничений” по числу потоков.

  • size– максимальный объем памяти, необходимый для асинхронного обмена. Если size = -1, то “нет ограничений”.

Функция возвращает 0 в случае удачного завершения или код ошибки.

  1. int AExit (int TopID);

Функция AExit деинициализирует структуры с функциями асинхронного обмена в топологии с идентификатором TopID

Функция возвращает 0 в случае удачного завершения или код ошибки.

  1. int ASend (int TopID, int LogLinkID, void*buf, int size, int*result);

int ARecv (int TopID, int LogLinkID, void*buf, int size, int*result);

  • TopID – идентификатор топологии;

  • LogLinkID – логическое имя линка;

  • void*buf – адрес переменной, которая будет передана/ адрес переменной, которая будет записана;

  • size – размер в байтах полученной или передаваемой информации;

  • result - адрес переменной целого типа куда будет записана ошибка.

Пример:

#include <sys/root.h>

#include <sys/topology.h>

#include <sys/comm.h>

#include <stdio.h>

#include <math.h>

# define nLinks 1

# define n 6

# define Reg 11

void Pouse(int k) {

int i;

for ( i=0; i<k; i++) sin(i);

}

int main() {

int MyProcID;TopID = NewTop(nLinks);I; LogLinkID;error; LinkCB_t*Link;

MyProcID = GetRoot()->ProcRoot-Ю>MyProcID;

if (MyProcID==0) Link = ConnectLink(1, reg, &error)

else Link = ConnectLink(0, reg, &error);

LogLinkID=AddTop(TopID, Link);

error = AIint (TopID, nLinks, -1);

if (error) {

printf(“Ошибка инициализации\n ”)

exit(1);

}

else printf(“MyProcID =%d инициализация прошла успешно\n ” MyProcID);

if (MyProcID==0) {

int a[n];

for ( i=0; i<n; i++) a[i]=3;

ARecv (TopID, LogLinkID, a,n*sizeof(int), &error);

for ( i=0; i<n; i++) {

printf(“%d ”, a[i]);

if (!((i+1)%20) printf(“\n”));

}

}

else {

int b[n];

for ( i=0; i<n; i++) a[i]=5;

pause(2000);

ASend (TopID, LogLinkID, b,n*sizeof(int), &error);

}

error = AExit (TopID);

FreeTop (int TopID);

return error;

}

На экране: