![]() |
![]() |
![]() |
Write a reply
#include <sys/neutrino.h> int MsgWritev( int rcvid, const iov_t* iov, int parts, int offset ); int MsgWritev_r( int rcvid, const iov_t* iov, int parts, int offset );
libc
The MsgWritev() and MsgWritev_r() functions are identical except in the way they indicate errors. See the Returns section for details.
These kernel calls write data to the reply buffer of a thread identified by rcvid. The rcvid is returned from MsgReceive*() when you receive the message. The thread being written to must be in the REPLY-blocked state. Any thread in the receiving process is free to write to the reply message.
The data is read from the array of buffers pointed to by iov. The number of elements in the array is given by parts. The offset allows you to write data to the sender's reply message starting at any point. The data transfer occurs immediately and your thread doesn't block. The state of the sending thread doesn't change.
If you attempt to write past the end of the sender's reply message then MsgWritev() returns fewer bytes than requested. This function is used in one of two situations:
To complete a message exchange, MsgReply*() must be called. The reply doesn't need to contain any data. If it does contain data, then it will always be written at offset zero in the destination thread's reply message buffer. This is a convenient way of writing the header once all of the information has been gathered.
A single call to MsgReply*() is always more efficient than calls to MsgWritev() followed by a call to MsgReply*().
None. In the network case, lower priority threads may run.
The only difference between the MsgWritev() and MsgWritev_r() functions is the way they indicate errors:
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |
MsgRead(), MsgReadv(), MsgReceive(), MsgReceivev(), MsgReply(), MsgReplyv(), MsgWrite()
![]() |
![]() |
![]() |