|MQ_OVERVIEW(7)||Linux Programmer's Manual||MQ_OVERVIEW(7)|
NAME¶mq_overview - overview of POSIX message queues
DESCRIPTION¶POSIX message queues allow processes to exchange data in the form of messages. This API is distinct from that provided by System V message queues (msgget(2), msgsnd(2), msgrcv(2), etc.), but provides similar functionality.
Library interfaces and system calls¶In most cases the mq_*() library interfaces listed above are implemented on top of underlying system calls of the same name. Deviations from this scheme are indicated in the following table:
Versions¶POSIX message queues have been supported on Linux since kernel 2.6.6. Glibc support has been provided since version 2.3.4.
Kernel configuration¶Support for POSIX message queues is configurable via the CONFIG_POSIX_MQUEUE kernel configuration option. This option is enabled by default.
Persistence¶POSIX message queues have kernel persistence: if not removed by mq_unlink(3), a message queue will exist until the system is shut down.
Linking¶Programs using the POSIX message queue API must be compiled with cc -lrt to link against the real-time library, librt.
/proc interfaces¶The following interfaces can be used to limit the amount of kernel memory consumed by POSIX message queues:
- This file can be used to view and change the ceiling value for the maximum number of messages in a queue. This value acts as a ceiling on the attr->mq_maxmsg argument given to mq_open(3). The default value for msg_max is 10. The minimum value is 1 (10 in kernels before 2.6.28). The upper limit is HARD_MAX: (131072 / sizeof(void *)) (32768 on Linux/86). This limit is ignored for privileged processes (CAP_SYS_RESOURCE), but the HARD_MAX ceiling is nevertheless imposed.
- This file can be used to view and change the ceiling on the maximum message size. This value acts as a ceiling on the attr->mq_msgsize argument given to mq_open(3). The default value for msgsize_max is 8192 bytes. The minimum value is 128 (8192 in kernels before 2.6.28). The upper limit for msgsize_max is 1,048,576 (in kernels before 2.6.28, the upper limit was INT_MAX; that is, 2,147,483,647 on Linux/86). This limit is ignored for privileged processes (CAP_SYS_RESOURCE).
- This file can be used to view and change the system-wide limit on the number of message queues that can be created. Only privileged processes (CAP_SYS_RESOURCE) can create new message queues once this limit has been reached. The default value for queues_max is 256; it can be changed to any value in the range 0 to INT_MAX.
Resource limit¶The RLIMIT_MSGQUEUE resource limit, which places a limit on the amount of space that can be consumed by all of the message queues belonging to a process's real user ID, is described in getrlimit(2).
Mounting the message queue file system¶On Linux, message queues are created in a virtual file system. (Other implementations may also provide such a feature, but the details are likely to differ.) This file system can be mounted (by the superuser) using the following commands:
# mkdir /dev/mqueue # mount -t mqueue none /dev/mqueue
The sticky bit is automatically enabled on the mount directory.
$ cat /dev/mqueue/mymq QSIZE:129 NOTIFY:2 SIGNO:0 NOTIFY_PID:8260
These fields are as follows:
- Number of bytes of data in all messages in the queue.
- If this is nonzero, then the process with this PID has used mq_notify(3) to register for asynchronous message notification, and the remaining fields describe how notification occurs.
- Notification method: 0 is SIGEV_SIGNAL; 1 is SIGEV_NONE; and 2 is SIGEV_THREAD.
- Signal number to be used for SIGEV_SIGNAL.
Polling message queue descriptors¶On Linux, a message queue descriptor is actually a file descriptor, and can be monitored using select(2), poll(2), or epoll(7). This is not portable.
NOTES¶System V message queues (msgget(2), msgsnd(2), msgrcv(2), etc.) are an older API for exchanging messages between processes. POSIX message queues provide a better designed interface than System V message queues; on the other hand POSIX message queues are less widely available (especially on older systems) than System V message queues.
EXAMPLE¶An example of the use of various message queue functions is shown in mq_notify(3).
SEE ALSO¶getrlimit(2), mq_getsetattr(2), poll(2), select(2), mq_close(3), mq_getattr(3), mq_notify(3), mq_open(3), mq_receive(3), mq_send(3), mq_unlink(3), epoll(7)
COLOPHON¶This page is part of release 3.44 of the Linux man-pages project. A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.