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);
}
Поделиться:
Популярные книги
Идущий в тени. Книга 2
2. Идущий в тени
Фантастика:
фэнтези
6.93
рейтинг книги
Сонный лекарь 4
4. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Возрождение Феникса. Том 1
1. Возрождение Феникса
Фантастика:
фэнтези
попаданцы
альтернативная история
6.79
рейтинг книги
Не грози Дубровскому!
1. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Покоритель Звездных врат
1. Повелитель звездных врат
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Партиец
2. Переломный век
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Эффект Фостера
Любовные романы:
современные любовные романы
5.00
рейтинг книги
В теле пацана 4
4. Великое плато Вита
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство 7
7. Ваше Сиятельство
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Уязвимость
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Мой любимый (не) медведь
Любовные романы:
современные любовные романы
7.90
рейтинг книги
Смертник из рода Валевских. Книга 1
1. Смертник из рода Валевских
Фантастика:
фэнтези
рпг
аниме
5.40
рейтинг книги
Бездомыш. Предземье
3. К Вершине
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Пустоши
1. Медорфенов
Фантастика:
фэнтези
попаданцы
5.00