summaryrefslogtreecommitdiffstats
path: root/man2/msgop.2
diff options
context:
space:
mode:
Diffstat (limited to 'man2/msgop.2')
-rw-r--r--man2/msgop.2415
1 files changed, 415 insertions, 0 deletions
diff --git a/man2/msgop.2 b/man2/msgop.2
new file mode 100644
index 000000000..00e0513cf
--- /dev/null
+++ b/man2/msgop.2
@@ -0,0 +1,415 @@
+.\" Copyright 1993 Giorgio Ciucci <giorgio@crcc.it>
+.\"
+.\" 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.
+.\"
+.\" Modified Tue Oct 22 16:40:11 1996 by Eric S. Raymond <esr@thyrsus.com>
+.\" Modified Mon Jul 10 21:09:59 2000 by aeb
+.\" Modified 1 Jun 2002, Michael Kerrisk <mtk16@ext.canterbury.ac.nz>
+.\" Language clean-ups.
+.\" Enhanced and corrected information on msg_qbytes, MSGMNB and MSGMAX
+.\" Added note on restart behaviour of msgsnd and msgrcv
+.\" Formatting clean-ups (argument and field names marked as .I
+.\" instead of .B)
+.\" Modified, 27 May 2004, Michael Kerrisk <mtk16@ext.canterbury.ac.nz>
+.\" Added notes on capability requirements
+.\"
+.TH MSGOP 2 2004-05-27 "Linux 2.6.6" "Linux Programmer's Manual"
+.SH NAME
+msgop \- message operations
+.SH SYNOPSIS
+.nf
+.B
+#include <sys/types.h>
+.br
+.B
+#include <sys/ipc.h>
+.br
+.B
+#include <sys/msg.h>
+.fi
+.sp
+.BI "int msgsnd(int " msqid ,
+.BI "struct msgbuf *" msgp ,
+.BI "size_t " msgsz ,
+.BI "int " msgflg );
+.sp
+.BI "ssize_t msgrcv(int " msqid ,
+.BI "struct msgbuf *" msgp ,
+.BI "size_t " msgsz ,
+.BI "long " msgtyp ,
+.BI "int " msgflg );
+.SH DESCRIPTION
+To send or receive a message, the calling process allocates a structure
+of the following general form:
+.sp
+.B
+ struct msgbuf {
+.br
+.B
+ long mtype;
+/* message type, must be > 0 */
+.br
+.B
+ char mtext[1];
+/* message data */
+.br
+.B
+ };
+.sp
+The
+.I mtext
+field is an array (or other structure) whose size is specified by
+.IR msgsz ,
+a non-negative integer value.
+Messages of zero length (i.e., no
+.I mtext
+field) are permitted.
+The
+.I mtype
+field must have a strictly positive integer value that can be
+used by the receiving process for message selection
+(see the section about
+.BR msgrcv ).
+.PP
+The calling process must have write permission to send
+and read permission to receive a message on the queue.
+.PP
+The
+.B msgsnd
+system call appends a copy of the message pointed to by
+.I msgp
+to the message queue whose identifier is specified
+by
+.IR msqid .
+.PP
+If sufficient space is available on the queue,
+.B msgsnd
+succeeds immediately.
+(The queue capacity is defined by the
+.I msg_bytes
+field in the associated data structure for the message queue.
+During queue creation this field is initialised to
+.B MSGMNB
+bytes, but this limit can be modified using
+.BR msgctl .)
+If insufficient space is available on the queue, then the default
+behaviour of
+.B msgsnd
+is to block until space becomes available.
+If
+.B IPC_NOWAIT
+is asserted in
+.B msgflg
+then the call instead fails with the error
+.BR EAGAIN .
+
+A blocked
+.B msgsnd
+call may also fail if the queue is removed
+(in which case the system call fails with
+.I errno
+set to
+.BR EIDRM ),
+or a signal is caught (in which case the system call fails
+with
+.I errno
+set to
+.BR EINTR ).
+.RB ( msgsnd " and " msgrcv
+are never automatically restarted after being interrupted by a
+signal handler, regardless of the setting of the
+.B SA_RESTART
+flag when establishing a signal handler.)
+.PP
+Upon successful completion the message queue data structure is updated
+as follows:
+.IP
+.I msg_lspid
+is set to the process ID of the calling process.
+.IP
+.I msg_qnum
+is incremented by 1.
+.IP
+.I msg_stime
+is set to the current time.
+.PP
+The system call
+.B msgrcv
+reads a message from the message queue specified by
+.I msqid
+into the
+.I msgbuf
+pointed to by the
+.I msgp
+argument, removing the read message from the queue.
+.PP
+The argument
+.I msgsz
+specifies the maximum size in bytes for the member
+.I mtext
+of the structure pointed to by the
+.I msgp
+argument.
+If the message text has length greater than
+.IR msgsz ,
+then if the
+.I msgflg
+argument asserts
+.BR MSG_NOERROR ,
+the message text will be truncated (and the truncated part will be
+lost), otherwise the message isn't removed from the queue and
+the system call fails returning with
+.I errno
+set to
+.BR E2BIG .
+.PP
+The argument
+.I msgtyp
+specifies the type of message requested as follows:
+.IP
+If
+.I msgtyp
+is
+.BR 0 ,
+then the first message in the queue is read.
+.IP
+If
+.I msgtyp
+is greater than
+.BR 0 ,
+then the first message on the queue of type
+.I msgtyp
+is read, unless
+.B MSG_EXCEPT
+was asserted in
+.IR msgflg ,
+in which case
+the first message on the queue of type not equal to
+.I msgtyp
+will be read.
+.IP
+If
+.I msgtyp
+is less than
+.BR 0 ,
+then the first message on the queue with the lowest type less than or
+equal to the absolute value of
+.I msgtyp
+will be read.
+.PP
+The
+.I msgflg
+argument asserts none, one or more (or\-ing them) of the following
+flags:
+.IP
+.B IPC_NOWAIT
+For immediate return if no message of the requested type is on the queue.
+The system call fails with errno set to
+.BR ENOMSG .
+.IP
+.B MSG_EXCEPT
+Used with
+.I msgtyp
+greater than
+.B 0
+to read the first message on the queue with message type that differs
+from
+.IR msgtyp .
+.IP
+.B MSG_NOERROR
+To truncate the message text if longer than
+.I msgsz
+bytes.
+.PP
+If no message of the requested type is available and
+.B IPC_NOWAIT
+isn't asserted in
+.IR msgflg ,
+the calling process is blocked until one of the following conditions occurs:
+.IP
+A message of the desired type is placed on the queue.
+.IP
+The message queue is removed from the system.
+In this case the system call fails with
+.I errno
+set to
+.BR EIDRM .
+.IP
+The calling process catches a signal.
+In this case the system call fails with
+.I errno
+set to
+.BR EINTR .
+.PP
+Upon successful completion the message queue data structure is updated
+as follows:
+.IP
+.I msg_lrpid
+is set to the process ID of the calling process.
+.IP
+.I msg_qnum
+is decremented by 1.
+.IP
+.I msg_rtime
+is set to the current time.
+.SH "RETURN VALUE"
+On a failure both functions return
+.B \-1
+with
+.I errno
+indicating the error,
+otherwise
+.B msgsnd
+returns
+.B 0
+and
+.B msgrvc
+returns the number of bytes actually copied into the
+.I mtext
+array.
+.SH ERRORS
+When
+.B msgsnd
+fails, at return
+.I errno
+will be set to one among the following values:
+.TP
+.B EACCES
+The calling process does not have write permission on the message queue,
+and does not have the
+.BR CAP_IPC_OWNER
+capability.
+.TP 11
+.B EAGAIN
+The message can't be sent due to the
+.I msg_qbytes
+limit for the queue and
+.B IPC_NOWAIT
+was asserted in
+.IR mgsflg .
+.TP
+.B EFAULT
+The address pointed to by
+.I msgp
+isn't accessible.
+.TP
+.B EIDRM
+The message queue was removed.
+.TP
+.B EINTR
+Sleeping on a full message queue condition, the process caught a signal.
+.TP
+.B EINVAL
+Invalid
+.I msqid
+value, or nonpositive
+.I mtype
+value, or
+invalid
+.I msgsz
+value (less than 0 or greater than the system value
+.BR MSGMAX ).
+.TP
+.B ENOMEM
+The system has not enough memory to make a copy of the supplied
+.IR msgbuf .
+.PP
+When
+.B msgrcv
+fails, at return
+.I errno
+will be set to one among the following values:
+.TP 11
+.B E2BIG
+The message text length is greater than
+.I msgsz
+and
+.B MSG_NOERROR
+isn't asserted in
+.IR msgflg .
+.TP
+.B EACCES
+The calling process does not have read permission on the message queue,
+and does not have the
+.BR CAP_IPC_OWNER
+capability.
+.TP
+.B EFAULT
+The address pointed to by
+.I msgp
+isn't accessible.
+.TP
+.B EIDRM
+While the process was sleeping to receive a message,
+the message queue was removed.
+.TP
+.B EINTR
+While the process was sleeping to receive a message,
+the process received a signal that had to be caught.
+.TP
+.B EINVAL
+Illegal
+.I msgqid
+value, or
+.I msgsz
+less than
+.BR 0 .
+.TP
+.B ENOMSG
+.B IPC_NOWAIT
+was asserted in
+.I msgflg
+and no message of the requested type existed on the message queue.
+.SH NOTES
+The followings are system limits affecting a
+.B msgsnd
+system call:
+.TP 11
+.B MSGMAX
+Maximum size for a message text: the implementation set this value to
+8192 bytes.
+.TP
+.B MSGMNB
+Default maximum size in bytes of a message queue: 16384 bytes.
+The super\-user can increase the size of a message queue beyond
+.B MSGMNB
+by a
+.B msgctl
+system call.
+.PP
+The implementation has no intrinsic limits for the system wide maximum
+number of message headers
+.RB ( MSGTQL )
+and for the system wide maximum size in bytes of the message pool
+.RB ( MSGPOOL ).
+.SH "CONFORMING TO"
+SVr4, SVID.
+.SH NOTE
+The pointer argument is declared as \fIstruct msgbuf *\fP with
+libc4, libc5, glibc 2.0, glibc 2.1. It is declared as \fIvoid *\fP
+(\fIconst void *\fP for \fImsgsnd()\fP) with glibc 2.2, following the SUSv2.
+.SH "SEE ALSO"
+.BR msgctl (2),
+.BR msgget (2),
+.BR msgrcv (2),
+.BR msgsnd (2),
+.BR ipc (5),
+.BR capabilities (7)