mq_getattr, mq_setattr — get/set message queue attributes
#include <mqueue.h>
int
mq_getattr( |
mqd_t mqdes, |
struct mq_attr *attr) ; |
int
mq_setattr( |
mqd_t mqdes, |
const struct mq_attr *newattr, | |
struct mq_attr *oldattr) ; |
Note | |
---|---|
Link with |
mq_getattr
() and
mq_setattr
() respectively
retrieve and modify attributes of the message queue referred
to by the message queue descriptor mqdes
.
mq_getattr
() returns an
mq_attr structure in the
buffer pointed by attr
. This structure is defined
as:
struct mq_attr { long mq_flags
; /* Flags: 0 or O_NONBLOCK */long mq_maxmsg
; /* Max. # of messages on queue */long mq_msgsize
; /* Max. message size (bytes) */long mq_curmsgs
; /* # of messages currently in queue */};
The mq_flags
field
contains flags associated with the open message queue
description. This field is initialized when the queue is
created by mq_open(3). The only flag
that can appear in this field is O_NONBLOCK
.
The mq_maxmsg
and
mq_msgsize
fields are
set when the message queue is created by mq_open(3). The mq_maxmsg
field is an upper
limit on the number of messages that may be placed on the
queue using mq_send(3). The mq_msgsize
field is an upper
limit on the size of messages that may be placed on the
queue. Both of these fields must have a value greater than
zero. Two /proc
files that
place ceilings on the values for these fields are described
in mq_overview(7).
The mq_curmsgs
field returns the number of messages currently held in the
queue.
mq_setattr
() sets message
queue attributes using information supplied in the
mq_attr structure pointed to
by newattr
. The only
attribute that can be modified is the setting of the
O_NONBLOCK
flag in mq_flags
. The other fields in
newattr
are ignored.
If the oldattr
field
is not NULL, then the buffer that it points to is used to
return an mq_attr structure
that contains the same information that is returned by
mq_getattr
().
On success mq_getattr
() and
mq_setattr
() return 0; on
error, −1 is returned, with errno
set to indicate the error.
The message queue descriptor specified in mqdes
is invalid.
newattr−>mq_flags
contained set bits other than O_NONBLOCK
.
For an explanation of the terms used in this section, see attributes(7).
Interface | Attribute | Value |
mq_getattr (), mq_setattr () |
Thread safety | MT-Safe |
On Linux, mq_getattr
() and
mq_setattr
() are library
functions layered on top of the mq_getsetattr(2) system
call.
The program below can be used to show the default
mq_maxmsg
and
mq_msgsize
values
that are assigned to a message queue that is created with a
call to mq_open(3) in which the
attr
argument is
NULL. Here is an example run of the program:
$ ./a.out /testq Maximum # of messages on queue: 10 Maximum message size: 8192
Since Linux 3.5, the following /proc
files (described in mq_overview(7)) can be used
to control the defaults:
$ uname -sr Linux 3.8.0 $ cat /proc/sys/fs/mqueue/msg_default 10 $ cat /proc/sys/fs/mqueue/msgsize_default 8192
#include <mqueue.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \ } while (0) int main(int argc, char *argv[]) { mqd_t mqd; struct mq_attr attr; if (argc != 2) { fprintf(stderr, "Usage: %s mq−name\n", argv[0]); exit(EXIT_FAILURE); } mqd = mq_open(argv[1], O_CREAT | O_EXCL, S_IRUSR | S_IWUSR, NULL); if (mqd == (mqd_t) −1) errExit("mq_open"); if (mq_getattr(mqd, &attr) == −1) errExit("mq_getattr"); printf("Maximum # of messages on queue: %ld\n", attr.mq_maxmsg); printf("Maximum message size: %ld\n", attr.mq_msgsize); if (mq_unlink(argv[1]) == −1) errExit("mq_unlink"); exit(EXIT_SUCCESS); }
mq_close(3), mq_notify(3), mq_open(3), mq_receive(3), mq_send(3), mq_unlink(3), mq_overview(7)
This page is part of release 4.07 of the Linux man-pages
project. A
description of the project, information about reporting bugs,
and the latest version of this page, can be found at
https://www.kernel.org/doc/man−pages/.
t Copyright (C) 2006 Michael Kerrisk <mtk.manpagesgmail.com> %%%LICENSE_START(VERBATIM) Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Since the Linux kernel and libraries are constantly changing, this manual page may be incorrect or out-of-date. The author(s) assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. The author(s) may not have taken the same level of care in the production of this manual, which is licensed free of charge, as they might when working professionally. Formatted or processed versions of this manual, if unaccompanied by the source, must acknowledge the copyright and authors of this work. %%%LICENSE_END |