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

UptoLike

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

257
непревышение длиной сообщения, заданного системой верхне-
го предела;
положительное значение типа сообщения.
Если же оказывается, что новое сообщение невозможно буферизо-
вать в ядре по причине превышения верхнего предела суммарной длины
сообщений, находящихся в данной очереди сообщений (флаг
IPCNOWAIT при этом отсутствует), то обратившийся процесс отклады-
вается сыпляется) до тех пор, пока очередь сообщений не разгрузится
процессами, ожидающими получения сообщений, или очередь не будет
удалена, или вызвавший поток не будет прерван перехватываемым сиг-
налом.
Для приема сообщения используется системный вызов msgrcv
int rnsgrcv (int msgqid, void *msg, size_t size, long
rnsg_type, int flag)
Аргумент rnsg_type задает тип сообщения, которое нужно считать
из очереди
если значение равно 0, то возвращается первое сообщение в
очереди, т. е. самое старое сообщение;
если тип больше 0, то возвращается первое сообщение, тип ко-
торого равен указанному числу;
если тип меньше нуля, возвращается первое сообщение с
наименьшим типом, значение которого меньше, либо равно модулю
указанного числа.
Значение size в данном случае указывает ядру, что возвращаемые
данные не должны превышать размера указанного в size.
Системный вызов msgctl позволяет управлять очередями сообще-
ний
int msgctl (int msgqid, int command, struct msgid_ds *msg_stat)
и используется:
для опроса состояния описателя очереди сообщений (command
= IPCSTAT) и помещения его в структуру msgstat;
изменения его состояния (command = IPCSET), например изме-
нения прав доступа к очереди;
для уничтожения указанной очереди сообщений (command =
IPCRMID).
9.4.2 Работа с разделяемой памятью
Для работы с разделяемой памятью используются системные вызовы: