Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
MSGRCV(2)		  FreeBSD System Calls Manual		     MSGRCV(2)

     msgrcv -- receive a message from a	message	queue

     Standard C	Library	(libc, -lc)

     #include <sys/types.h>
     #include <sys/ipc.h>
     #include <sys/msg.h>

     msgrcv(int	msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);

     The msgrcv() function receives a message from the message queue specified
     in	msqid, and places it into the structure	pointed	to by msgp.  This
     structure should consist of the following members:

	 long mtype;	/* message type	*/
	 char mtext[1];	/* body	of message */

     mtype is an integer greater than 0	that can be used for selecting mes-
     sages, mtext is an	array of bytes,	with a size up to that of the system
     limit (MSGMAX).

     The value of msgtyp has one of the	following meanings:

     +o	 The msgtyp argument is	greater	than 0.	 The first message of type
	 msgtyp	will be	received.

     +o	 The msgtyp argument is	equal to 0.  The first message on the queue
	 will be received.

     +o	 The msgtyp argument is	less than 0.  The first	message	of the lowest
	 message type that is less than	or equal to the	absolute value of
	 msgtyp	will be	received.

     The msgsz argument	specifies the maximum length of	the requested message.
     If	the received message has a length greater than msgsz it	will be
     silently truncated	if the MSG_NOERROR flag	is set in msgflg, otherwise an
     error will	be returned.

     If	no matching message is present on the message queue specified by
     msqid, the	behavior of msgrcv() depends on	whether	the IPC_NOWAIT flag is
     set in msgflg or not.  If IPC_NOWAIT is set, msgrcv() will	immediately
     return a value of -1, and set errno to ENOMSG.  If	IPC_NOWAIT is not set,
     the calling process will be blocked until:

     +o	 A message of the requested type becomes available on the message

     +o	 The message queue is removed, in which	case -1	will be	returned, and
	 errno set to EINVAL.

     +o	 A signal is received and caught.  -1 is returned, and errno set to

     If	a message is successfully received, the	data structure associated with
     msqid is updated as follows:

     +o	 msg_cbytes is decremented by the size of the message.

     +o	 msg_lrpid is set to the pid of	the caller.

     +o	 msg_lrtime is set to the current time.

     +o	 msg_qnum is decremented by 1.

     Upon successful completion, msgrcv() returns the number of	bytes received
     into the mtext field of the structure pointed to by msgp.	Otherwise, -1
     is	returned, and errno set	to indicate the	error.

     The msgrcv() function will	fail if:

     [EINVAL]		The msqid argument is not a valid message queue	iden-

			The message queue was removed while msgrcv() was wait-
			ing for	a message of the requested type	to become
			available on it.

			The msgsz argument is less than	0.

     [E2BIG]		A matching message was received, but its size was
			greater	than msgsz and the MSG_NOERROR flag was	not
			set in msgflg.

     [EACCES]		The calling process does not have read access to the
			message	queue.

     [EFAULT]		The msgp argument points to an invalid address.

     [EINTR]		The system call	was interrupted	by the delivery	of a

     [ENOMSG]		There is no message of the requested type available on
			the message queue, and IPC_NOWAIT is set in msgflg.

     msgctl(2),	msgget(2), msgsnd(2)

     Message queues appeared in	the first release of AT&T System V UNIX.

FreeBSD	13.0			 July 28, 2016			  FreeBSD 13.0


Want to link to this manual page? Use this URL:

home | help