POSIX Message Queue¶
POSIX message queues provide kernel-managed message-based IPC.
They preserve message boundaries, support message priorities, and can be integrated into event-driven programs through file descriptors on Linux.
What Problem It Solves¶
Use POSIX message queues when processes need to exchange discrete messages without manually implementing framing or shared buffer management.
Typical use cases:
- command queues
- event messages
- producer/consumer IPC
- priority-based local message delivery
Core Concepts¶
| Concept | Description |
|---|---|
mq_open() |
Creates or opens a message queue |
mq_send() |
Sends one message |
mq_receive() |
Receives one message |
mq_getattr() |
Reads queue attributes |
mq_unlink() |
Removes the named queue |
mq_notify() |
Registers asynchronous notification |
Message Queue Attributes¶
Important fields:
mq_maxmsg: maximum number of messagesmq_msgsize: maximum size of each messagemq_curmsgs: current number of queued messagesmq_flags: blocking or non-blocking mode
Event Loop Integration¶
On Linux, a POSIX message queue descriptor can be used with epoll().
This makes it suitable for event-driven IPC designs:
Common Pitfalls¶
Warning
mq_receive() requires a buffer large enough for mq_msgsize, not just the expected message length.
Note
POSIX message queues are named kernel objects. Use mq_unlink() when the queue should be removed.