Структуры данных, используемые для организации очередей сообщений
msgsnd(msgqid, msg, count,
flag);
- msg
- это указатель на структуру, содержащую целочисленный тип сообщения
и символьный массив
- count - задает
размер сообщения в байтах
- flag определяет
действия ядра при выходе за пределы допустимых размеров внутренней
буферной памяти
Условия успешной постановки сообщения в очередь:
- процесс должен иметь право на запись в очередь
- длина сообщения не должна превосходить верхний предел
- общая длина сообщений не должна превосходить установленного
предела
- тип сообщения должен быть положительным целым числом
Процесс продолжает свое выполнение
Ядро активизирует (пробуждает) все процессы, ожидающие поступления
сообщений из очереди
Превышается верхний предел суммарной длины
сообщений
- обратившийся процесс откладывается до разгрузки
очереди
- но есть флаг IPC_NOWAIT
(как для семафоров)
count = msgrcv(id, msg,
maxcount, type, flag);
- msg
- указатель на структуру данных в адресном пространстве пользователя
для размещения принятого сообщения
- maxcount
- размер области данных (массива байтов) в структуре msg
- type
специфицирует тип сообщения, которое желательно принять
- flag
указывает ядру, что следует предпринять, если в указанной очереди
сообщений отсутствует сообщение с указанным типом
- count
- реальное число байтов, переданных пользователю
Значением параметра type является нуль
- выбирается первое сообщение
- копируется в заданную пользовательскую структуру
данных
- процессы, отложенные по причине переполнения
очереди сообщений, активизируются
- если значение параметра maxcount
оказывается меньше реального размера сообщения, ядро не удаляет
сообщение из очереди и возвращает код ошибки
- если задан флаг MSG_NOERROR,
то выборка сообщения производится, и в буфер пользователя переписываются
первые maxcount
байтов сообщения
Значение type есть положительное целое число
- выбирается первое сообщение с таким же типом
Значение type есть отрицательное целое число
- выбирается первое сообщение, значение типа которого
меньше или равно абсолютному значению type
В очереди отсутствуют сообщения, соответствующие
спецификации type
- процесс откладывается до появления в очереди
требуемого сообщения
- но есть флаг IPC_NOWAIT
msgctl(id, cmd, mstatbuf);
- опрос состояния описателя очереди сообщений
- изменение его состояния
- уничтожение очереди сообщений