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

на главную

Жанры

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
рейтинг книги
Идущий в тени. Книга 2

Сонный лекарь 4

Голд Джон
4. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Сонный лекарь 4

Возрождение Феникса. Том 1

Володин Григорий Григорьевич
1. Возрождение Феникса
Фантастика:
фэнтези
попаданцы
альтернативная история
6.79
рейтинг книги
Возрождение Феникса. Том 1

Не грози Дубровскому!

Панарин Антон
1. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому!

Покоритель Звездных врат

Карелин Сергей Витальевич
1. Повелитель звездных врат
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Покоритель Звездных врат

Партиец

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

Эффект Фостера

Аллен Селина
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Эффект Фостера

В теле пацана 4

Павлов Игорь Васильевич
4. Великое плато Вита
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
В теле пацана 4

Ваше Сиятельство 7

Моури Эрли
7. Ваше Сиятельство
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Ваше Сиятельство 7

Уязвимость

Рам Янка
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Уязвимость

Мой любимый (не) медведь

Юнина Наталья
Любовные романы:
современные любовные романы
7.90
рейтинг книги
Мой любимый (не) медведь

Смертник из рода Валевских. Книга 1

Маханенко Василий Михайлович
1. Смертник из рода Валевских
Фантастика:
фэнтези
рпг
аниме
5.40
рейтинг книги
Смертник из рода Валевских. Книга 1

Бездомыш. Предземье

Рымин Андрей Олегович
3. К Вершине
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Бездомыш. Предземье

Пустоши

Сай Ярослав
1. Медорфенов
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Пустоши