table of contents
other versions
- wheezy 3.44-1
- jessie 3.74-1
- jessie-backports 4.10-2~bpo8+1
- testing 4.10-2
- unstable 4.10-2
MQ_OVERVIEW(7) | Linux Programmer's Manual | MQ_OVERVIEW(7) |
NAME¶
mq_overview - overview of POSIX message queuesDESCRIPTION¶
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:- /proc/sys/fs/mqueue/msg_max
- 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.
- /proc/sys/fs/mqueue/msgsize_max
- 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).
- /proc/sys/fs/mqueue/queues_max
- 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:
- QSIZE
- Number of bytes of data in all messages in the queue.
- NOTIFY_PID
- 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.
- NOTIFY
- Notification method: 0 is SIGEV_SIGNAL; 1 is SIGEV_NONE; and 2 is SIGEV_THREAD.
- SIGNO
- 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.CONFORMING TO¶
POSIX.1-2001.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/.2009-09-27 | Linux |