Функция msgrcv завершится ошибкой, если: [E2BIG] Значение mtext больше, чем msgsz и (msgflg & MSG_NOERROR) равно 0. [EACCES]
Блокирует ли Msgrcv?
Функции msgsnd и msgrcv могут выполняться как блокирующие или неблокирующие операции. Неблокирующие операции допускают асинхронную передачу сообщений - процесс не приостанавливается в результате отправки или получения сообщения.
Удаляет ли msgrcv сообщение из очереди?
Системный вызов msgrcv удаляет сообщение из очереди, указанной msqid, и помещает его в буфер, на который указывает msgp. Аргумент msgsz указывает максимальный размер в байтах для члена mtext структуры, на которую указывает аргумент msgp.
Как работает msgrcv?
Функция msgrcv считывает сообщение из очереди сообщений, указанной параметром msqid, и помещает его в пользовательский буфер, на который указывает параметр msgp. Параметр msgp указывает на определяемый пользователем буфер, который должен содержать следующее: Поле типа long int, указывающее тип сообщения.
Что возвращает msgrcv?
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
После успешного завершения msgrcv возвращает значение, равное количеству байтов, фактически помещенных в буфер mtext. В противном случае сообщение не будет получено, msgrcv вернет (ssize_t)-1, а errno будет установлен для указания ошибки.