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
рейтинг книги
Заклятие предков
3. Ведун
Фантастика:
фэнтези
альтернативная история
8.49
рейтинг книги
Крепость над бездной
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Рота Его Величества
Новые герои
Фантастика:
боевая фантастика
8.55
рейтинг книги
Экспансия: Сотрудничество. Том 5
5. Планетарный десант
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Отверженный III: Вызов
3. Отверженный
Фантастика:
фэнтези
альтернативная история
7.73
рейтинг книги
Князь Серединного мира
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Возвышение Меркурия. Книга 8
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Эволюционер из трущоб. Том 5
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Локки 7. Потомок бога
7. Локки
Фантастика:
аниме
эпическая фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 4
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00