Операционная система UNIX. Руководство программиста


Использование очередей сообщений


Перед тем, как посылать или принимать сообщения, должны быть созданы очередь сообщений с уникальным идентификатором и ассоциированная с ней структура данных. Порожденный уникальный идентификатор называется идентификатором очереди сообщений (msqid); он используется для обращений к очереди сообщений и ассоциированной структуре данных.

Говоря об очереди сообщений следует иметь в виду, что реально в ней хранятся не сами сообщения, а их описатели, имеющие следующую структуру:

struct msg { struct msg *msg_next; /* Указатель на следующее сообщение */ long msg_type; /* Тип сообщения */ short msg_ts; /* Размер текста сообщения */ short msg_spot; /* Адрес текста сообщения */ };

Приведенное определение находится во включаемом файле <sys/msg.h>.

С каждым уникальным идентификатором очереди сообщений ассоциирована одна структура данных, которая содержит следующую информацию:

struct msqid_ds { struct ipc_perm msg_perm; /* Структура прав на выполнение операций */ struct msg *msg_first; /* Указатель на первое сообщение в очереди */ struct msg *msg_last; /* Указатель на последнее сообщение в очереди */ ushort msg_cbytes; /* Текущее число байт в очереди */ ushort msg_qnum; /* Число сообщений в очереди */ ushort msg_qbytes; /* Макс. допустимое число байт в очереди */ ushort msg_lspid; /* Ид-р последнего отправителя */ ushort msg_lrpid; /* Ид-р последнего получателя */ time_t msg_stime; /* Время последнего отправления */ time_t msg_rtime; /* Время последнего получения */ time_t msg_ctime; /* Время последнего изменения */ };

Это определение также находится во включаемом файле <sys/msg.h>. Поле msg_perm данной структуры использует в качестве шаблона структуру ipc_perm, которая задает права на операции с сообщениями и определяется так:

struct ipc_perm { ushort uid; /* Идентификатор пользователя */ ushort gid; /* Идентификатор группы */ ushort cuid; /* Идентификатор создателя очереди */ ushort cgid; /* Ид-р группы создателя очереди */ ushort mode; /* Права на чтение/запись */ ushort seq; /* Последовательность номеров используемых слотов */ key_t key; /* Ключ */ };




Начало  Назад  Вперед



Книжный магазин