Как мы увидим далее, на передачу обычных сообщений влияет механизм управления потоком данных, который может быть реализован модулями потока. Этот механизм не оказывает влияния на передачу приоритетных сообщений. Сообщения этой категории будут переданы следующему модулю, независимо от того, насколько заполнена его очередь. Эти сообщения обеспечивают основное взаимодействие между компонентами потока. Перечисленные ниже сообщения являются высокоприоритетными:
M_COPYIN | Передается вверх по потоку головному модулю и указывает ему скопировать данные от процесса для команды M_IOCTL и сообщения M_IOCACK или M_IOCNAK . |
M_COPYOUT | Передается вверх по потоку головному модулю и указывает ему передать данные, связанные с вызовом M_IOCTL и сообщений M_IOCACK или M_IOCNAK . |
M_ERROR | Передается вверх по потоку головному модулю и указывает на возникновение ошибки вниз по потоку. Последующие операции с потоком будут заканчиваться ошибкой, за исключением системных вызовов |
M_FLUSH | При получении этого сообщения модуль должен очистить очередь (чтения, записи или обе) от сообщений. |
M_HANGUP | Передается вверх по потоку головному модулю и указывает, что драйвер не может передавать данные, обычно из-за обрыва линии (связи с удаленным объектом). |
M_IOCACK | Подтверждение предыдущего сообщения M_IOCTL . В ответ головной модуль возвратит необходимые данные процессу, сделавшему системный вызов |
M_IOCNAK | Если выполнение команды |
M_PCPROTO | Высокоприоритетная версия сообщения M_PROTO . |
M_PCSIG | Высокоприоритетная версия сообщения M_SIG . |
M_PCRSE | Зарезервировано для внутреннего использования в подсистеме. |
M_READ | Сообщение передается вниз по потоку, когда от процесса поступает запрос на чтение, но в головном модуле отсутствуют данные. |
M_STOP | Предписывает немедленно прекратить передачу. |
M_START | Предписывает продолжить передачу после останова, вызванного сообщением M_STOP . |
Передача данных
Как уже обсуждалось, передача данных в потоке происходит в виде сообщений. Процесс инициирует передачу данных с помощью системных вызовов
Сообщения передаются модулями с помощью системной функции
#include
#include
int putnext(queue_t *q, mblk_t *mp);
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии