[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Структура очередей сообщений

Очередь сообщений  создается вызовом  msgget(2) с  командой IPC_CREAT.
При создании  очереди создается  ее дескриптор msgid_ds. Эта структура
данных используется  системными вызовами,  которые посылают и получают
сообщения.

Создав очередь,  процессы могут  ставить в нее сообщения (msgsnd(2)) и
получать их оттуда (msgrcv(2)).

Сообщение представляет  собой набор  байтов. Его размер может меняться
от нуля  до максимума,  определяемого системой.  Содержимое может быть
любым -  ASCII или  двоичными данными.  Оно может  иметь любой формат,
например, массив символов или структура.

Когда сообщение  ставится в  очередь, отправитель метит его типом. Тип
представляет собой длинное целое.

Управляющая структура данных содержит два указателя. Один указывает на
первое  сообщение   в  очереди,  а  другой  -  на  последнее.  Очередь
образуется связанным  списком заголовков  сообщений. Каждый  заголовок
содержит тип  сообщения, его  размер и адрес, и указатель на следующий
заголовок в очереди.

Получатель может  избирательно обрабатывать  сообщения  в  очереди.  В
частности,  существуют   три  способа,   которыми   получатель   может
запрашивать сообщение.

       .  Первое сообщение в очереди.

       .  Первое сообщение заданного типа.

       .  Первое сообщение типа из диапазона значений [1:n]

Иллюстрация показывает  очередь, в которой стоят четыре сообщения. Что
будет получено, если процесс запрашивает:

- сообщение типа 5.
- первое в очереди сообщение.
- сообщение, имеющее тип от 1 до 2.
- сообщение типа 10.