msgrcv (2)
  прием сообщения из очереди  

Синтаксис
 
    # include <sys/ipc.h>
    # include <sys/msg.h>

    int msgrcv (int msgid, struct msgbuf * msgp, 
       int msgzs, long msgtype, int msgflg)    

Описание
  msgrcv получает выполняет сообщение из очереди, задаваемой аргументом msgid - идентификатором очереди - и записывает его в буфер, адрес которого задается аргументом msgp. Cтруктура, содержащая сообщение:
     struct msgbuf {
         long mtype;     /* Тип сообщения */
         char mtext [];  /* Текст сообщения */
         };

Аргумент msgsz задает размер принимаемого сообщения; сообщения большего размера усекаются.

Аргумент msgtype задает тип принимаемого сообщения:

  • Если значение msgtyp равно 0, требуется первое сообщение в очереди.
  • Если значение msgtyp больше 0, требуется первое сообщение типа msgtyp.
  • Если значение msgtyp меньше 0, требуется первое сообщение наименьшего из типов, которые меньше или равны абсолютной величине аргумента msgtyp.

Аргумент msgflg может принимать значение 0 или IPC_NOWAIT.

  • Если IPC_NOWAIT не задано, то при отсутствии в очереди сообщения требуемого типа процесс, вызвавший msgrcv, переводится в состояние ожидания, вывести из которого его может приход сообщения или сигнал.
  • Если IPC_NOWAIT задано, то при отсутствии в очереди сообщения возврат из вызова msgrcv происходит немедленно, при этом вызов возвращает -1.

Возвращаемое значение
  При успешном завершении возвращает количество байт в принятом сообщении. В случае ошибки возвращается -1 и устанавливается код ошибки в errno.

См.также
  msgctl, msgget, msgsnd.


Список системных вызовов