[<<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.