Skip to content

mq_send() / mq_receive()

Purpose

Sends and receives messages through a POSIX message queue.

#include <mqueue.h>

Prototype

int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned int msg_prio);
ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned int *msg_prio);

Parameters

  • mqdes: message queue descriptor.
  • msg_ptr: message buffer.
  • msg_len: message length. For receive, buffer size must be at least mq_msgsize.
  • msg_prio: message priority.

Return Value

  • mq_send(): returns 0 on success, -1 on failure.
  • mq_receive(): returns received byte count on success, -1 on failure.

Minimal Example

char buf[128];
unsigned int prio;
ssize_t n = mq_receive(mq, buf, sizeof(buf), &prio);

Common Pitfalls

  • The receive buffer must be large enough for the queue message size.
  • Non-blocking queues return EAGAIN when empty or full.
  • POSIX mqueue descriptors can be monitored by epoll() on Linux.