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

FreeBSD Manual Pages

  
 
  

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

NAME
       msgsnd -- send a	message	to a message queue

LIBRARY
       Standard	C Library (libc, -lc)

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

       int
       msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

DESCRIPTION
       The msgsnd() function sends a message to	the message queue specified in
       msqid.  The msgp	argument points	to a structure containing the message.
       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 (see msgrcv(2)), mtext is an array	of msgsz bytes.	 The  argument
       msgsz can range from 0 to a system-imposed maximum, MSGMAX.

       If  the number of bytes already on the message queue plus msgsz is big-
       ger than	the maximum number of bytes on the message queue  (msg_qbytes,
       see  msgctl(2)),	or the number of messages on all queues	system-wide is
       already equal to	the system limit,  msgflg  determines  the  action  of
       msgsnd().   If  msgflg has IPC_NOWAIT mask set in it, the call will re-
       turn immediately.  If msgflg does not have IPC_NOWAIT set  in  it,  the
       call will block until:

       o   The	condition which	caused the call	to block does no longer	exist.
	   The message will be sent.

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

       o   The	caller	catches	 a signal.  The	call returns with errno	set to
	   EINTR.

       After a successful call,	the data structure associated with the message
       queue is	updated	in the following way:

       o   msg_cbytes is incremented by	the size of the	message.

       o   msg_qnum is incremented by 1.

       o   msg_lspid is	set to the pid of the calling process.

       o   msg_stime is	set to the current time.

RETURN VALUES
       The msgsnd() function returns the value 0 if successful;	otherwise  the
       value  -1  is returned and the global variable errno is set to indicate
       the error.

ERRORS
       The msgsnd() function will fail if:

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

			  The  message	queue  was  removed while msgsnd() was
			  waiting for a	resource to become available in	 order
			  to deliver the message.

			  The msgsz argument is	greater	than msg_qbytes.

			  The mtype argument is	not greater than 0.

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

       [EAGAIN]		  There	was no space for this message  either  on  the
			  queue,  or  in  the whole system, and	IPC_NOWAIT was
			  set in msgflg.

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

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

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

BUGS
       NetBSD and FreeBSD do not define	the EIDRM error	value, which should be
       used in the case	of a removed message queue.

FreeBSD	13.2			 July 9, 2009			     MSGSND(2)

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | HISTORY | BUGS

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

home | help