Отправить сообщение (без точки завершения потока)
#include <sys/neutrino.h>int MsgSendnc( int coid,const void *smsg,int sbytes,void *rmsg,int rbytes );int MsgSendnc_r( int coid,const void *smsg,int sbytes,void *rmsg,int rbytes );
libc
Функции MsgSendnc() и MsgSendnc_r() отправляют сообщение в канал, идентифицируемый соединением coid.
Данные функции идентичны за исключением способа возврата ошибок.
Передаваемые данные не могут переполнить приёмный буфер, предоставленный получателем (фактический размер передаваемого сообщения - наименьшее из двух величин: размера отправляемого сообщения и размера буфера на стороне получателя).
Поток-отправитель становится заблокированным, пока не получит ответ от получателя. Если поток-получатель находится в состоянии RECEIVE-блокировки на канале, то передача данных в его адресное пространство происходит немедленно, поток-получатель разблокируется и становится готов к выполнению. При этом поток-отправитель становится REPLY-блокированным. В случае, если нет потоков, ожидающих сообщения на канале, поток-отправитель становится SEND-блокированным и помещается в очередь (возможно, с другими потоками). В этом случае реальной передачи данных не происходит, пока принимающий поток не вызовет функцию MsgReceive*(). В этот момент поток-отправитель станет REPLY-блокированным.
Эффективный приоритет потока-получателя может измениться (в значение приоритета потока-отправителя) при отправке ему сообщения. Наследование приоритетов является поведением по умолчанию и может быть изменено с помощью соответствующего флага при вызове функции создания канала. |
MsgSend() является точкой завершения потока для функции ThreadCancel(); MsgSendnc() точкой завершения потока не является.
STATE_REPLY
. STATE_SEND
.
ЗОСРВ «Нейтрино»
Максимальный размер сообщения определяется размером виртуального адресного пространства и зависит от процессорной архитектуры.
ConnectAttach(), MsgError(), MsgReceive(), MsgReceivev(), MsgReply(), MsgReplyv(), MsgSend(), MsgSendPulse(), MsgSendsv(), MsgSendsvnc(), MsgSendv(), MsgSendvnc(), MsgSendvs(), MsgSendvsnc(), name_open(), ThreadCancel(), TimerTimeout()
Предыдущий раздел: Описание API системной библиотеки