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

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

Жанры

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);

}

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

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Жених из гроба

Сотис Майя
1. Гробокопательница
Фантастика:
юмористическое фэнтези
сказочная фантастика
фэнтези
5.00
рейтинг книги
Жених из гроба

Ищу жену с прицепом

Рам Янка
2. Спасатели
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Ищу жену с прицепом

Гримуар тёмного лорда I

Грехов Тимофей
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар тёмного лорда I

Заклятие предков

Прозоров Александр Дмитриевич
3. Ведун
Фантастика:
фэнтези
альтернативная история
8.49
рейтинг книги
Заклятие предков

Крепость над бездной

Лисина Александра
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Крепость над бездной

Рота Его Величества

Дроздов Анатолий Федорович
Новые герои
Фантастика:
боевая фантастика
8.55
рейтинг книги
Рота Его Величества

Экспансия: Сотрудничество. Том 5

Белов Артем
5. Планетарный десант
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Экспансия: Сотрудничество. Том 5

Отверженный III: Вызов

Опсокополос Алексис
3. Отверженный
Фантастика:
фэнтези
альтернативная история
7.73
рейтинг книги
Отверженный III: Вызов

Князь Серединного мира

Земляной Андрей Борисович
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Князь Серединного мира

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8

Эволюционер из трущоб. Том 5

Панарин Антон
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 5

Локки 7. Потомок бога

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

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4