msgctl
SYNOPSIS
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
DESCRIPTION
msgctl() performs the control operation specified by cmd on the message
queue with identifier msqid.
The msqid_ds data structure is defined in <sys/msg.h> as follows:
struct msqid_ds {
struct ipc_perm msg_perm; /* Ownership and permissions */
time_t msg_stime; /* Time of last msgsnd(2) */
time_t msg_rtime; /* Time of last msgrcv(2) */
time_t msg_ctime; /* Time of last change */
unsigned long __msg_cbytes; /* Current number of bytes in
queue (non-standard) */
msgqnum_t msg_qnum; /* Current number of messages
in queue */
msglen_t msg_qbytes; /* Maximum number of bytes
allowed in queue */
pid_t msg_lspid; /* PID of last msgsnd(2) */
pid_t msg_lrpid; /* PID of last msgrcv(2) */
};
The ipc_perm structure is defined in <sys/ipc.h> as follows (the high-
lighted fields are settable using IPC_SET):
struct ipc_perm {
key_t __key; /* Key supplied to msgget(2) */
uid_t uid; /* Effective UID of owner */
gid_t gid; /* Effective GID of owner */
uid_t cuid; /* Effective UID of creator */
gid_t cgid; /* Effective GID of creator */
unsigned short mode; /* Permissions */
unsigned short __seq; /* Sequence number */
};
Valid values for cmd are:
IPC_STAT
Copy information from the kernel data structure associated with
msqid into the msqid_ds structure pointed to by buf. The caller
must have read permission on the message queue.
IPC_SET
Write the values of some members of the msqid_ds structure
pointed to by buf to the kernel data structure associated with
this message queue, updating also its msg_ctime member. The
following members of the structure are updated: msg_qbytes,
or its effective user ID must be either that of the creator or
owner of the message queue.
IPC_INFO (Linux-specific)
Returns information about system-wide message queue limits and
parameters in the structure pointed to by buf. This structure
is of type msginfo (thus, a cast is required), defined in
<sys/msg.h> if the _GNU_SOURCE feature test macro is defined:
struct msginfo {
int msgpool; /* Size in kibibytes of buffer pool
used to hold message data;
unused within kernel */
int msgmap; /* Maximum number of entries in message
map; unused within kernel */
int msgmax; /* Maximum number of bytes that can be
written in a single message */
int msgmnb; /* Maximum number of bytes that can be
written to queue; used to initialize
msg_qbytes during queue creation
(msgget(2)) */
int msgmni; /* Maximum number of message queues */
int msgssz; /* Message segment size;
unused within kernel */
int msgtql; /* Maximum number of messages on all queues
in system; unused within kernel */
unsigned short int msgseg;
/* Maximum number of segments;
unused within kernel */
};
The msgmni, msgmax, and msgmnb settings can be changed via /proc
files of the same name; see proc(5) for details.
MSG_INFO (Linux-specific)
Returns a msginfo structure containing the same information as
for IPC_INFO, except that the following fields are returned with
information about system resources consumed by message queues:
the msgpool field returns the number of message queues that cur-
rently exist on the system; the msgmap field returns the total
number of messages in all queues on the system; and the msgtql
field returns the total number of bytes in all messages in all
queues on the system.
MSG_STAT (Linux-specific)
Returns a msqid_ds structure as for IPC_STAT. However, the
msqid argument is not a queue identifier, but instead an index
into the kernel's internal array that maintains information
about all message queues on the system.
RETURN VALUE
On success, IPC_STAT, IPC_SET, and IPC_RMID return 0. A successful
IPC_INFO or MSG_INFO operation returns the index of the highest used
entry in the kernel's internal array recording information about all
msqid, and does not have the CAP_IPC_OWNER capability.
EFAULT The argument cmd has the value IPC_SET or IPC_STAT, but the
address pointed to by buf isn't accessible.
EIDRM The message queue was removed.
EINVAL Invalid value for cmd or msqid. Or: for a MSG_STAT operation,
the index value specified in msqid referred to an array slot
that is currently unused.
EPERM The argument cmd has the value IPC_SET or IPC_RMID, but the
effective user ID of the calling process is not the creator (as
found in msg_perm.cuid) or the owner (as found in msg_perm.uid)
of the message queue, and the process is not privileged (Linux:
it does not have the CAP_SYS_ADMIN capability).
CONFORMING TO
SVr4, POSIX.1-2001.
NOTES
The IPC_INFO, MSG_STAT and MSG_INFO operations are used by the ipcs(8)
program to provide information on allocated resources. In the future
these may modified or moved to a /proc file system interface.
Various fields in the struct msqid_ds were typed as short under Linux
2.2 and have become long under Linux 2.4. To take advantage of this, a
recompilation under glibc-2.1.91 or later should suffice. (The kernel
distinguishes old and new calls by an IPC_64 flag in cmd.)
SEE ALSO
msgget(2), msgrcv(2), msgsnd(2), capabilities(7), mq_overview(7),
svipc(7)
COLOPHON
This page is part of release 3.23 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/.
Linux 2008-08-06 MSGCTL(2)
Man Pages Copyright Respective Owners. Site Copyright (C) 1994 - 2013
Hurricane Electric.
All Rights Reserved.