msqid_ds(4) — File Formats
NAME
msqid_ds − Defines a message queue
SYNOPSIS
#include <sys/msg.h> struct msqid_ds{
struct ipc_perm msg_perm;
struct msg ∗msg_first;
struct msg ∗msg_last;
u_short msg_cbytes;
u_short msg_qnum;
u_short msg_qbytes;
u_short msg_lspid;
ushort msg_lrpid;
time_t msg_stime;
time_t msg_rtime;
time_t msg_ctime;
};
DESCRIPTION
The msqid_ds structure defines a message queue associated with a message queue ID. There is one queue per message queue ID. Collectively, the queues are stored as an array, with message queue IDs serving as an index into the array.
A message queue is implemented as a linked list of messages, with msg_first amd msg_last pointing to the first and last messages on the queue.
The IPC permissions for the message queue are implemented in a separate, but associated, ipc_perm structure.
A message queue is created indirectly via the msgget() call. If msgget() is called with a non-existent message queue ID, the kernel allocates a new msqid_ds structure, initializes it, and returns the message queue ID that is to be associated with the message queue.
FIELDS
msg_permThe ipc_perm structure that defines permissions for message operations. See NOTES.
msg_firstA pointer to the first message on the queue.
msg_lastA pointer to the last message on the queue.
msg_cbytes
The current number of bytes on the queue.
msg_qnumThe number of messages currently on the queue.
msg_qbytes
The maximum number of bytes allowed on the queue.
msg_lspidThe process ID of the last process that called msgsnd() for the queue.
msg_lrpidThe process ID of the last process that called msgrcv() for the queue.
msg_stimeThe time of the last msgsnd() operation.
msg_rtimeThe time of the last msgrcv() operation.
msg_ctimeThe time of the last msgctl() operation that changed a member of the msqid_ds structure.
NOTES
The msg_perm field identifies the associated ipc_perm structure that defines the permissions for operations on the message queue. The ipc_perm structure (from the sys/ipc.h header file) is shown here.
struct ipc_perm {
ushort uid; /∗ owner’s user id ∗/
ushort gid; /∗ owner’s group id ∗/
ushort cuid; /∗ creator’s user id ∗/
ushort cgid; /∗ creator’s group id ∗/
ushort mode; /∗ access modes ∗/
ushort seq; /∗ slot usage sequence number ∗/
key_t key; /∗ key ∗/
};
The mode field is a 9-bit field that contains the permissions for message operations. The first three bits identify owner permissions; the second three bits identify group permissions; and the last three bits identify other permissions. In each group, the first bit indicates read permission; the second bit indicates write permission; and the third bit is not used.