HPlogo MPE/iX Developer's Kit Reference Manual Volume 2: HP 3000 MPE/iX Computer Systems > Chapter 2 SVID IPC Library Function Descriptions

msgsnd

» 

Technical documentation

Complete book in PDF
» Feedback

 » Table of Contents

 » Index

Sends a message to a message queue.

Syntax

   #include <sys/types.h>

   #include <sys/ipc.h>

   #include <sys/msg.h>



   int msgsnd (int msqid, void *msgp, int msgsz,

               int msgflg);

Parameters

msqid

Passes a message queue identifier returned by a call to msgget().

msgp

Passes a pointer to a buffer whose structure is similar to the msgbuf example template located in <msg.h>, for example:

struct example_msgbuf {



   long   mtype;                  /* message type          */

   char   mtext[your_buffer_size];  /* message text          */



   };
where your_buffer_size is an integer specifying the size of the buffer. The mtype field stores a positive integer value that can be used by a receiving process for message selection (refer to msgrcv()). The mtext field stores the text of the message. The size of mtext is specified by the msgsz argument.

msgsz

The size, in bytes, of mtext. Valid values are from 0 to a system-defined limit.

msgflg

Passes a value defining what action to take if the number of bytes passed would cause the size of the specified queue to exceed the system-defined limit (msq_bytes), the total size of message data on this queue would exceed the system-defined limit, or the system-wide message buffer pool is temporarily depleted due to the amount of data queued to all message queues.

Flags are:

IPC_NOWAIT

The calling process is not suspended. Control returns immediately with errno set to EAGAIN.

If msgflg does not specify IPC_NOWAIT and one of the previous conditions would occur, the calling process suspends execution. When the condition that caused the suspension no longer exists, msgsnd() continues execution.

Return Values

0

Success.

-1

An error occurred, and errno is set to indicate the error condition.

Description

The msgsnd() function sends a message stored in the buffer pointed to by msgp to the message queue associated with msqid.

If the message queue associated with msqid is removed from the system while the calling process is suspended waiting to send a message, msgsnd() returns an error and sets errno to EIDRM .

If msgsnd() is successful, the following fields of the data structure associated with msqid are updated to the indicated values:

msg_qnum

Incremented by 1

msg_lrpid

PID of the calling process

msg_rtime

Current time

Implementation Considerations

If a process suspended during execution of msgsnd() receives a signal, control returns to the user with errno set to EINTR. Disabled signals are ignored.

Errors

If an error occurs, errno is set to one of the following values.

EACCESCAUSE The calling process does not have permission.
 ACTION Ensure that the calling process has write permission for the message queue.
EAGAINCAUSE msgflg specifies IPC_NOWAIT and either the number of bytes passed would cause the size of the specified queue to exceed the system-defined limit, the total size of message data on this queue would exceed the system-defined limit, or the system-wide message buffer pool is temporarily depleted due to the amount of data queued to all message queues.
 ACTION None. Application dependent. The send operation can be retried later.
EFAULTCAUSE The system detected a NULL or bad address in attempting to use the msgp argument.
 ACTION Check to see if the pointer is correctly initialized.
EIDRMCAUSE The message queue specified by msqid was removed while msgsnd() was waiting on a message.
 ACTION None.
EINTRCAUSE msgsnd() was interrupted by a signal.
 ACTION None. Application dependent.
EINVALCAUSE msqid is not a valid message queue identifier, or msgsz is less than 0 or greater than the system-defined limit, or mtype is less than 0.
 ACTION Check the parameters to make sure the msqid is valid and has not been removed from the system, and that the msgsz and mtype are within valid ranges.
ESYSERRCAUSE An operating system error occurred that does not map directly to any of the above errors.
 ACTION Examine the MPE/iX process error stack for the type of system error.

See Also

msgctl(), msgget(), msgrcv(), SVID2 (Section 12)

Feedback to webmaster