Операционные системы. Теория и практика. Замятин А.В. - 256 стр.

UptoLike

Составители: 

256
rnsgsnd для постановки сообщения в указанную очередь сообще-
ний;
rnsgrcv для выборки сообщения из очереди сообщений;
rnsgctl для выполнения ряда управляющих действий.
Прототипы перечисленных системных вызовов описаны в файлах
#include <sys/ipc.h>
#include <sys/msg.h>
По системному вызову msgget в ответ на ключ (key) определяется
уникальное имя очереди и набор флагов (полностью аналогичны флагам
в системном вызове semget). Вызовом msgget ядро либо создает новую
очередь сообщений в ядре и возвращает пользователю идентификатор
созданной очереди, либо находит элемент таблицы очередей сообщений
ядра, содержащий указанный ключ, и возвращает соответствующий
идентификатор очереди:
int msgqid = msgget(key_t key, int flag)
Таким образом, очередь сообщения обладает живучестью ядра. Для
помещения сообщения в очередь служит системный вызов msgsnd:
int rnsgsnd (int msgqid, void *rnsg, size_t size, int flaq)
где msg это указатель на структуру длиной size, содержащую
определяемый пользователем целочисленный тип сообщения и сим-
вольный массив-сообщение, причем размер пользовательских данных
вычисляется следующим образом: size = sizeof(msg) sizeof(long).
Структура msg всегда имеет вид
struct rnsq {
lonq rntype; /* тип сообщения */
char mtext[SOMEVALUE]; /*текст сообщения */
};
Поле типа long всегда должно быть первым в структуре, далее мо-
гут следовать в любом порядке пользовательские данные, в этом случае
ядро не накладывает ограничение на тип данных, а только на их длину
ависящую от реализации системы). Параметр flag определяет действия
ядра для вызвавшего потока при чтении очереди или выходе за пределы
допустимых размеров внутренней буферной памяти. Если flag = 0, то
при отсутствии сообщения в очереди поток блокируется. Если
flag = IPCNOWAIT, то поток не блокируется и при отсутствии сообще-
ния возвращается ошибка ENOMSG.
Условиями успешной постановки сообщения в очередь являются:
наличие прав процесса по записи в данную очередь сообщений;