Ожидать сообщения или импульса
#include <sys/neutrino.h>int MsgReceivev( int chid,const iov_t *riov,int rparts,struct _msg_info *info );int MsgReceivev_r( int chid,const iov_t *riov,int rparts,struct _msg_info *info );
NULL
или указатель на структуру struct _msg_info, в которой функция будет сохранять дополнительную информацию о сообщении.libc
Функции MsgReceivev() и MsgReceivev_r() ждут поступления сообщения или импульса в канал, имеющий идентификатор chid, и сохраняют полученные данные в массиве буферев, на который указывает riov.
Данные функции идентичны за исключением способа возврата ошибок.
Количество переданных байт будет меньшим из значений размера, указанного клиентом и сервером. Полученные данные не могут переполнять предоставленный приемный буфер.
Размер первого буфера, заданного в векторе piov , должен быть достаточным для получения импульса. В противном случае функция вернёт ошибку EFAULT . |
Если сообщение уже отправлено клиентом до того, как сервер вызвал MsgReceivev(), то поток-сервер не блокируется, и сообщение немедленно записывается в приёмный буфер. Если же сообщение ещё не было отправлено, то поток-сервер переходит в состояние RECEIVE-блокирован до момента поступления сообщения.
Если в канал было отправлено несколько сообщений и не было потока, их ожидающего, то сообщения будут помещены в очередь в порядке их приоритетов.
Эффективный приоритет потока-сервера может изменяться при получении сообщений, наследуя приоритет потока-клиента. |
Если вместо NULL
задан указатель info на структуру struct _msg_info, то функция сохранит дополнительную информацию о сообщении и о потоке-клиенте, его отправившем. Эта информация может также быть получена позже с помощью функции MsgInfo().
Не отвечайте на импульс.
|
В случае успешного выполнения обе функции возвращают положительное значение, если получено сообщение, или 0
, осли получен импульс.
-1
и устанавливает errno.
INT_MAX
. ЗОСРВ «Нейтрино»
iov_t, ChannelCreate(), struct _msg_info, MsgInfo(), MsgRead(), MsgReadv(), MsgReceive(), MsgReceivePulse(), MsgReceivePulsev(), MsgReply(), MsgReplyv(), MsgWrite(), MsgWritev(), struct _pulse, TimerTimeout()
Предыдущий раздел: Описание API системной библиотеки