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

FreeBSD Manual Pages

  
 
  

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

NAME
       msgrcv -- receive a message from	a message queue

LIBRARY
       Standard	C Library (libc, -lc)

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

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

DESCRIPTION
       The  msgrcv() function receives a message from the message queue	speci-
       fied 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:

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

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

          The msgtyp argument is less than 0.	The first message of the  low-
	   est	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  mes-
       sage.   If the received message has a length greater than msgsz it will
       be silently truncated if	the MSG_NOERROR	flag is	set in msgflg,	other-
       wise 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 immedi-
       ately return a value of -1, and set errno to ENOMSG.  If	IPC_NOWAIT  is
       not set,	the calling process will be blocked until:

          A  message  of  the requested type becomes available	on the message
	   queue.

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

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

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

          msg_cbytes is decremented by	the size of the	message.

          msg_lrpid is	set to the pid of the caller.

          msg_lrtime is set to	the current time.

          msg_qnum is decremented by 1.

RETURN VALUES
       Upon  successful	 completion,  msgrcv() returns the number of bytes re-
       ceived into the mtext field of the structure pointed to by msgp.	  Oth-
       erwise, -1 is returned, and errno set to	indicate the error.

ERRORS
       The msgrcv() function will fail if:

       [EINVAL]		  The  msqid  argument	is  not	 a valid message queue
			  identifier.

			  The message queue was	 removed  while	 msgrcv()  was
			  waiting  for	a message of the requested type	to be-
			  come 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
			  signal.

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

SEE ALSO
       msgctl(2), msgget(2), msgsnd(2)

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

FreeBSD	13.2			 July 28, 2016			     MSGRCV(2)

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | SEE ALSO | HISTORY

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=msgrcv&sektion=2&manpath=FreeBSD+14.2-RELEASE+and+Ports>

home | help