[<<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 установлена