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