ГЛАВА 6 Очереди сообщений System V

ГЛАВА 6

Очереди сообщений System V

6.1. Введениеы

Каждой очереди сообщений System V сопоставляется свой идентификатор очереди сообщений. Любой процесс с соответствующими привилегиями (раздел 3.5) может поместить сообщение в очередь, и любой процесс с другими соответствующими привилегиями может сообщение из очереди считать. Как и для очередей сообщений Posix, для помещения сообщения в очередь System V не требуется наличия подключенного к ней на считывание процесса.

Ядро хранит информацию о каждой очереди сообщений в виде структуры, определенной в заголовочном файле <sys/msg.h>:

struct msqid_ds {

 struct ipc_perm msg_perm; /* Разрешения чтения и записи: раздел 3.3 */

 struct msg *msg_first; /* указатель на первое сообщение в очереди */

 struct msg *msg_last; /* указатель на последнее сообщение в очереди */

 msglen_t msg_cbytes; /* размер очереди в байтах */

 msgqnum_t msg_qnum;  /* количество сообщений в очереди */

 msglen_t msg_qbytes; /* максимальный размер очереди в байтах */

 pid_t msg_lspid;  /* идентификатор (pid) последнего процесса, вызвавшего msgsnd(); */

 pid_t msg_lrpid;  /* pid последнего msgrcv(); */

 time_t msg_stime; /* время отправки последнего сообщения */

 time_t msg_rtime; /* время последнего считывания сообщения */

 time_t msg_ctime; /* время последнего вызова msgctl(), изменившего одно из полей структуры */

};

ПРИМЕЧАНИЕ

Unix 98 не требует наличия полей msg_first, msg_last и msg_cbytes. Тем не менее они имеются в большинстве существующих реализаций, производных от System V. Естественно, ничто не заставляет реализовывать очередь сообщений через связный список, который неявно предполагается при наличии полей msg_first и msg_last. Эти два указателя обычно указывают на участки памяти, принадлежащие ядру, и практически бесполезны для приложения.

Мы можем изобразить конкретную очередь сообщений, хранимую ядром как связный список, — рис. 6.1. В этой очереди три сообщения длиной 1, 2 и 3 байта с типами 100, 200 и 300 соответственно.

В этой главе мы рассмотрим функции, используемые для работы с очередями сообщений System V, и реализуем наш пример файлового сервера из раздела 4.2 с использованием очередей сообщений. 

Рис. 6.1. Структура очереди system V в ядре

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Базовые классы System.MulticastDelegate и System.Delegate

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Базовые классы System.MulticastDelegate и System.Delegate Таким образом, при создании типов c помощью) ключевого слова delegate в C# вы неявно объявляете тип класса, являющегося производным от System.MulticastDelegate. Этот класс обеспечивает своим потомкам доступ к списку с адресами тех методов, которые


Получение и пересылка сообщений. Создание ответных сообщений

Из книги Office 2007. Мультимедийный курс автора Мединов Олег

Получение и пересылка сообщений. Создание ответных сообщений Чтобы получить новую почту, выполните команду главного меню Сервис ? Отправить/Получить ? Доставить почту либо нажмите клавишу F9. Все полученные почтовые сообщения будут помещены в папку Входящие и помечены


ГЛАВА 3 System V IPC

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

ГЛАВА 3 System V IPC 3.1. Введение Из имеющихся типов IPC следующие три могут быть отнесены к System V IPC, то есть к методам взаимодействия процессов, соответствующим стандарту System V:? очереди сообщений System V (глава 6);? семафоры System V (глава 11);? общая память System V (глава 14).Термин «System V IPC»


ГЛАВА 5 Очереди сообщений Posix

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

ГЛАВА 5 Очереди сообщений Posix 5.1. Введение Очередь сообщений можно рассматривать как связный список сообщений. Программные потоки с соответствующими разрешениями могут помещать сообщения в очередь, а потоки с другими соответствующими разрешениями могут извлекать их


Пример: очереди сообщений Posix и функция select

Из книги Фундаментальные алгоритмы и структуры данных в Delphi автора Бакнелл Джулиан М.

Пример: очереди сообщений Posix и функция select Дескриптор очереди сообщений (переменная типа mqd_t) не является «обычным» дескриптором и не может использоваться с функциями select и poll (глава 6 [24]). Тем не менее их можно использовать вместе с каналом и функцией mq_notify. (Аналогичный


6.10. Ограничения, накладываемые на очереди сообщений

Из книги Русский справочник по Win32 API автора Сорока Тарас

6.10. Ограничения, накладываемые на очереди сообщений Как отмечалось в разделе 3.8, на очереди сообщений часто накладываются системные oгрaничeния. В табл. 6.2 приведены значения этих oгрaничeний для двух конкретных реализаций. Первая колонка представляет собой традиционное


ГЛАВА 11 Семафоры System V

Из книги автора

ГЛАВА 11 Семафоры System V 11.1.Введение В главе 10 мы описывали различные виды семафоров, начав с:? бинарного семафора, который может принимать только два значения: 0 и 1. По своим свойствам такой семафор аналогичен взаимному исключению (глава 7), причем значение 0 для семафора


Измерение полосы пропускания очереди сообщений Posix

Из книги автора

Измерение полосы пропускания очереди сообщений Posix В листинге А.5 приведена функция main программы, измеряющей полосу пропускания очереди сообщений Posix. Листинг А.6 содержит функции reader и writer. Эта программа устроена аналогично предыдущей, измерявшей полосу пропускания


Программа измерения полосы пропускания очереди System V

Из книги автора

Программа измерения полосы пропускания очереди System V В листинге А.7 приведен текст функции main, измеряющей полосу пропускания очередей сообщений System V, а в листинге А.8 —текст функций reader и writer.Листинг А.7. Функция main для измерения полосы пропускания очереди сообщений System


Измерение задержки очередей сообщений System V

Из книги автора

Измерение задержки очередей сообщений System V В листинге А.16 приведен текст программы измерения времени задержки для очередей сообщений System V.Листинг А.16. Программа измерения времени задержки для очередей сообщений System V//bench/lat_svmsg.c1  #include "unpipc.h"2  struct msgbuf p2child = { 1, { 0 } }; /* type = 1


26.5. Очереди сообщений

Из книги автора

26.5. Очереди сообщений 26.5.1. Основные структуры ядра для работы с очередями Очередь сообщений — это связный список, находящийся в адресном пространстве ядра. Каждая очередь имеет свой уникальный идентификатор IPC.Структура ядра msgbuf (описана в файле /usr/src/linux/include/linux/msg.h)


26.5.4. Получение сообщений очереди

Из книги автора

26.5.4. Получение сообщений очереди Для получения сообщения используется системный вызов msgrcv():int msgrcv(int msqid, struct msgbuf *msgp, int msgsz, long mtype, int msgflg);Первый аргумент определяет очередь, из которой нужно получить сообщение. Второй аргумент — это адрес буфера, в который будет записано


Глава 3. Связные списки, стеки и очереди

Из книги автора

Глава 3. Связные списки, стеки и очереди Как и массивы, связные списки представляют собой универсальную структуру данных, широко используемую многими программистами. Однако, в отличие от массивов, связные списки не входят в состав стандартного языка Object Pascal. Тем не менее,


Глава 9. Очереди по приоритету и пирамидальная сортировка.

Из книги автора

Глава 9. Очереди по приоритету и пирамидальная сортировка. В главе 3 мы рассмотрели несколько очень простых структур данных. Одной из них была очередь. В эту структуру можно было добавлять элементы, а затем извлекать их в порядке поступления. При этом сохранение даты и


Сообщения и очереди сообщений

Из книги автора

Сообщения и очереди сообщений GetQueueStatus Функция GetQueueStatus возвращает флаги, которые показывают тип сообщений, обнаруженных в очереди сообщений вызывающего потока. DWORD GetQueueStatus ( UINT flags // флаги состояния очереди ); Параметры flags - определяет флаги состояния очереди, указывая