Аллен Питер В.
Шрифт:
26.5.1. Основные структуры ядра для работы с очередями
Очередь сообщений — это связный список, находящийся в адресном пространстве ядра. Каждая очередь имеет свой уникальный идентификатор IPC.
Структура ядра msgbuf (описана в файле
Тут все ясно: тип сообщения и само сообщение. Используя тип сообщения, вы можете помещать в одну очередь разные сообщения, а не создавать еще одну очередь. Например, у нас есть два приложения — клиент и сервер. Вы можете использовать для них одну и ту же очередь: сообщения клиента будут с номером 1 (mtype = 1), а сообщения сервера — с номером 0 (mtype = 0).
Ясное дело, что сообщения из одного символа нас не устраивают, поэтому вы можете переопределить структуру msgbuf в своей программе:
Вы также можете добавлять новые поля в эту структуру (но только в своей программе! Код ядра модифицировать не нужно):
He бойтесь создавать свои структуры: ядру все равно, с какими данными работать, вам нужно учитывать только максимальный размер сообщения, который определен в файле /usr/src/linux/include/linux/msg.h:
4056 байтов — это максимальный размер не ваших данных, а всей структуры. включая тип сообщения. Размер типа long равен 4 байтам.
Сами сообщения хранятся ядром в структуре msg, которая также определена в файле msg.h:
Сообщения хранятся в виде односвязного списка. Первый член структуры msg_next — это указатель на следующее сообщение в очереди. Второй член msg_type — это тип сообщения, такой же, как в структуре msg_buf.
Следующий член структуры — это указатель на начало текста сообщения, а последний член msg_ts — размер текста сообщения.
Каждый тип объекта IPC представляется в ядре определенной структурой. Для очередей сообщений это структура msqid_ds (описана в файле
♦ msg_perm
Это структура типа ipc_perm (ipc_perm определена в файле