Чтение онлайн

на главную - закладки

Жанры

QNX/UNIX: Анатомия параллелизма
Шрифт:

resmgr_attr.nparts_max = 1;

resmgr_attr.msg_max_size = MESSIZE_MAX;

/* Задаем число доступных структур векторов ввода/вывода (IOV) = 1.

Задаем максимальный размер буфера получения равным MESSIZE_MAX.

В результате инициализируются атрибуты менеджера ресурсов */

/* Инициализация
функций обработки сообщений */

iofunc_func_init(_RESMGR_CONNECT_NFUNCS, &connect_funcs,

_RESMGR_IO_NFUNCS, &io_funcs);

/* В результате заполняются две таблицы (структуры), задающие функции

обработки для двух специальных типов сообщений:

таблица функций связи и таблица функций ввода/вывода.

В соответствующих местах размещаются принимаемые по умолчанию функции

iofunc_*_default ... Своими не заменяем - нет необходимости. */

/* Инициализация используемой устройством структуры атрибутов */

iofunc_attr_init(&attr, S_IFNAM | 0666, 0, 0);

attr.nbytes = MESSIZE_MAX + 1;

/* В результате инициализируется структура атрибутов,

используемая устройством;

S_IFNAM указывает, что тип устройства - Special named file,

побитовые флаги определяют права доступа,

число байт в ресурсе задается равным размеру буфера. */

/* Прикрепление имени устройства */

if ((id = resmgr_attach(dpp, &resmgr_attr, "/dev/MESSTEST/RM", _FTYPE_ANY,

0, &connect_funcs, &io_funcs, &attr)) == -1) {

printf("%s: невозможно прикрепить имя менеджера"

" ресурсов.\n", argv[0]);

return EXIT_FAILURE;

}

/* Ключевое действие: мы регистрируем на нашем узле имя /dev/MESSTEST/RM

dpp и resmgr_attr - инициализированные выше структуры;

/dev/MESSTEST/RM - ассоциированное с устройством имя,

_FTYPE_ANY - определяет тип открытия устройства (в данном случае

допускается любой тип запроса открытия);
равный нулю флаг

разборки пути имени файла определяет, что запрос -

только по имени /dev/MESSTEST/RM,

&connect_funcs - заданные выше подпрограммы связи;

&io_funcs - заданные выше подпрограммы ввода/вывода;

attr - инициализированная выше структура атрибутов устройства.

Подключаем диапазон сообщений, которые должны рассматриваться как

приватные, с передачей их обработчику для таких сообщений -

PrivatHandler */

if (message_attach(dpp, NULL, 0x5000, 0x5fff, &PrivatHandler, NULL) == -1) {

printf("невозможно подключить данный "

"диапазон приватных сообщений\n");

return(EXIT_FAILURE);

}

/* Размещение контекстной структуры */

ctp = dispatch_context_alloc(dpp);

/* Размер буфера сообщений, содержащегося а этой структуре, равно как и

число векторов ввода/вывода, также содержащихся в этой структуре,

установлены при инициализации структуры атрибутов менеджера ресурсов */

/* Запуск петли сообщений менеджера ресурсов */

while(1) {

// ожидание прихода сообщений

if ((ctp = dispatch_block(ctp)) == NULL) {

printf("ошибка блока\n");

return EXIT_FAILURE;

}

printf("Менеджер ресурсов получил сообщение"

" длиной %i байт\n", ctp->resmgr_context.info.msglen);

result = dispatch_handler(ctp);

// сообщение раскодируется, и на основании заданных таблиц функций связи

// и ввода/вывода вызывается соответствующая функция обработки сообщения

if (result)

printf("Менеджер ресурсов не смог обработать"

" сообщение result = %i\n", result);

}

Поделиться:
Популярные книги

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Отчий дом. Семейная хроника

Чириков Евгений Николаевич
Проза:
классическая проза
5.00
рейтинг книги
Отчий дом. Семейная хроника

Скандальная свадьба

Данич Дина
1. Такие разные свадьбы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Скандальная свадьба

Путанабус. Трилогия

Старицкий Дмитрий
Фантастика:
боевая фантастика
6.93
рейтинг книги
Путанабус. Трилогия

Идеальный мир для Лекаря 25

Сапфир Олег
25. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 25

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI

Проданная невеста

Wolf Lita
Любовные романы:
любовно-фантастические романы
5.80
рейтинг книги
Проданная невеста

Потомок бога

Решетов Евгений Валерьевич
1. Локки
Фантастика:
попаданцы
альтернативная история
аниме
сказочная фантастика
5.00
рейтинг книги
Потомок бога

С Д. Том 16

Клеванский Кирилл Сергеевич
16. Сердце дракона
Фантастика:
боевая фантастика
6.94
рейтинг книги
С Д. Том 16

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

От Советского Информбюро - 1941-1945 (Сборник)

Неизвестен 3 Автор
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
От Советского Информбюро - 1941-1945 (Сборник)

Санек 3

Седой Василий
3. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 3

Прометей: повелитель стали

Рави Ивар
3. Прометей
Фантастика:
фэнтези
7.05
рейтинг книги
Прометей: повелитель стали

Отмороженный 14.0

Гарцевич Евгений Александрович
14. Отмороженный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Отмороженный 14.0