Индустрия программирования

Структуры данных, используемые для организации очередей сообщений



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);

  • опрос состояния описателя очереди сообщений
  • изменение его состояния
  • уничтожение очереди сообщений





Содержание раздела