Warning: main(/www/www/htdocs/style/globals.php) [function.main]: failed to open stream: No such file or directory in /www/www/docs/6.4.1/neutrino/lib_ref/m/msgsendv.html on line 1
Warning: main() [function.include]: Failed opening '/www/www/htdocs/style/globals.php' for inclusion (include_path='.:/www/www/common:/www/www/php/lib/php') in /www/www/docs/6.4.1/neutrino/lib_ref/m/msgsendv.html on line 1
Warning: main(/www/www/htdocs/style/header.php) [function.main]: failed to open stream: No such file or directory in /www/www/docs/6.4.1/neutrino/lib_ref/m/msgsendv.html on line 8
Warning: main() [function.include]: Failed opening '/www/www/htdocs/style/header.php' for inclusion (include_path='.:/www/www/common:/www/www/php/lib/php') in /www/www/docs/6.4.1/neutrino/lib_ref/m/msgsendv.html on line 8
Send a message to a channel
#include <sys/neutrino.h>
int MsgSendv( int coid,
const iov_t* siov,
int sparts,
const iov_t* riov,
int rparts );
int MsgSendv_r( int coid,
const iov_t* siov,
int sparts,
const iov_t* riov,
int rparts );
- coid
- The ID of the channel to send the message on, which you've
established by calling
ConnectAttach()
or
name_open().
- siov
- An array of buffers that contains the message that you want to send.
- sparts
- The number of elements in the siov array.
- riov
- An array of buffers where the reply can be stored.
- rparts
- The number of elements in the riov array.
libc
Use the -l c option to
qcc
to link against this library.
This library is usually included automatically.
The MsgSendv() and MsgSendv_r()
kernel calls send a message to a process's channel identified by
coid.
These functions are identical
except in the way they indicate errors. See the Returns section for details.
The number of bytes transferred is the minimum of that specified
by both the sender and the receiver. The send data isn't allowed
to overflow the receive buffer area provided by the receiver. The reply
data isn't allowed to overflow the reply buffer area provided.
The sending thread becomes blocked waiting for a reply. If the
receiving process has a thread that's RECEIVE-blocked on the channel,
the transfer of data into its address space occurs immediately, and the
receiving thread is unblocked and made ready to run. The sending
thread becomes REPLY-blocked. If there are
no waiting threads on the channel, the sending thread becomes
SEND-blocked and is placed in a queue (perhaps
with other threads). In this case, the actual transfer of data doesn't
occur until a receiving thread receives on the channel. At this point,
the sending thread becomes REPLY-blocked.
It's quite common to send two-part messages consisting of a fixed
header and a buffer of data. The MsgSendv() function
gathers the data from the send list into a logically contiguous
message and transfers it to the receiver. The receiver doesn't need to specify
the same number or size of buffers. The data is laid down filling
each entry as required. The same applies to the replied data.
|
The receiving thread's effective priority might change when you send
a message to it.
For more information, see
“Priority inheritance and messages”
in the Interprocess Communication (IPC) chapter of the
System Architecture guide. |
MsgSendv() is a cancellation point for the
ThreadCancel() kernel call;
MsgSendvnc() isn't.
- STATE_SEND
- The message has been sent but not yet received. If a thread
is waiting to receive the message, this state is skipped
and the calling thread goes directly to STATE_REPLY.
- STATE_REPLY
- The message has been received but not yet replied to. This
state may be entered directly, or from STATE_SEND.
The only difference between the MsgSendv() and MsgSendv_r()
functions is the way they indicate errors:
- MsgSendv()
- Success
- The value of status from MsgReply*().
- -1
- An error occurred
(errno
is set), or the server called MsgError*()
(errno is set to the error value passed to MsgError()).
- MsgSendv_r()
- Success
- The value of status from MsgReply*().
- negative value
- An error occurred
(errno is NOT set, the value is the negative of a value from the Errors section), or
the server called MsgError*()
(errno is NOT set, the value is the negative of the error value passed to MsgError()).
- EBADF
- The connection indicated by coid is no longer
connected to a channel, or the connection indicated by coid
doesn't exist. The channel may have been terminated by the server,
or the network manager if it failed to respond to multiple polls.
- EFAULT
- A fault occurred when the kernel tried to access the buffers
provided. This may have occurred on the receive or the reply.
- EINTR
- The call was interrupted by a signal.
- EOVERFLOW
- The sum of the IOV lengths exceeds INT_MAX.
- ESRCH
- The server died while the calling thread was SEND-blocked or REPLY-blocked.
- ESRVRFAULT
- A fault occurred in a server's address space when accessing
the server's message buffers.
- ETIMEDOUT
- A kernel timeout unblocked the call. See
TimerTimeout().
QNX Neutrino
Safety: | |
Cancellation point |
Yes |
Interrupt handler |
No |
Signal handler |
Yes |
Thread |
Yes |
ConnectAttach(),
MsgReceive(),
MsgReceivev(),
MsgReply(),
MsgReplyv(),
MsgSend(),
MsgSendnc(),
MsgSendPulse(),
MsgSendsv(),
MsgSendsvnc(),
MsgSendvnc(),
MsgSendvs(),
MsgSendvsnc(),
name_open(),
TimerTimeout()
Message Passing
chapter of Getting Started with QNX Neutrino
Warning: main(/www/www/htdocs/style/footer.php) [function.main]: failed to open stream: No such file or directory in /www/www/docs/6.4.1/neutrino/lib_ref/m/msgsendv.html on line 317
Warning: main() [function.include]: Failed opening '/www/www/htdocs/style/footer.php' for inclusion (include_path='.:/www/www/common:/www/www/php/lib/php') in /www/www/docs/6.4.1/neutrino/lib_ref/m/msgsendv.html on line 317