[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Операции - очереди сообщений - msgsnd(2)
msgsnd - послать сообщение
Операции над очередью состоят в посылке (постановке в очередь)
сообщений и извлечении их оттуда.
msgid задает очередь, в которую нужно поместить сообщение. msgid - это
значение, возвращенное вызовом msgget(2).
msgp указывает на объект типа struct msgbuf, которая только что
обсуждалась. msgsz - число байтов, которые нужно послать.
Посылающий задает тип, длинное положительное целое, для каждого
посылаемого сообщения. Это первые четыре байта struct msgbuf. В
очереди сообщения хранятся в том порядке, в котором были посланы.
Получатель может разделять сообщения по типу, и, возможно, получать
сообщения в порядке отличном от того, в котором они были посланы.
msgflg задает действия на случай, если сообщение не может быть
поставлено в очередь. Как правило, процесс при попытке поставить
сообщение в заполненную очередь приостанавливается. Это происходит,
если достигнуто максимальное количество байтов, которые могут стоять в
очереди (msg_qbytes или MSGMNB), или общее число сообщений в системе
достигло заданного в системе максимального значения (MSGTQL). Если
такая блокировка нежелательна, вы должны установить в слове msgflg
IPC_NOWAIT. msgsnd(2) в таком режиме будет возвращать код неуспеха -1
в ситуациях, когда бы обычная операция была заблокирована.
Следующие системные параметры ограничивают системный вызов msgsnd(2)
(Максимальные значения и умолчания приведены для машины AT&T 3B2):
. MSGMAX - Максимальный размер сообщения. По умолчанию
2048 байт. Максимальное значение - 64
килобайта.
. MSGMNB - Максимальный размер очереди сообщений. По
умолчанию 4096.
. MSGMNI - Системное ограничение на количество
идентификаторов очередей. По умолчанию -
50.
. MSGTQL - Ограничение на количество заголовков
сообщений в системе, т.е. на максимальное
количество сообщений. По умолчанию - 40.
msgrcv(2) обсуждается на следующих страницах.
ОПЕРАЦИИ - ОЧЕРЕДИ СООБЩЕНИЙ - msgsnd(2)
msgop(2)
ИМЯ
msgop - операции над очередями
ИСПОЛЬЗОВАНИЕ
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
+ int msgsnd (int msg id, const struct msgbuf *msgp,
int msgsz, int msgflg);
int msgrcv (int msg id, const struct msgbuf *msgp,
int msgsz, long msgtyp, int msgflg);
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
msgsnd успех - 0
msgrcv успех - количество прочитанных байтов
неуспех - -1 и errno установлена