MsgReadv(), MsgReadv_r()

Считать данные из сообщения

Прототип:

#include <sys/neutrino.h>
int MsgReadv( int rcvid,
const iov_t *riov,
int rparts,
int offset );
int MsgReadv_r( int rcvid,
const iov_t *riov,
int rparts,
int offset );

Аргументы:

rcvid
Идентификатор сообщения, возвращаемый потоку-серверу функцией MsgReceivev*() при приеме сообщения.
riov
Массив объектов iov_t, в которых функции могут сохранять данные.
rparts
Количество элементов массива riov.
offset
Смещение относительно начала отправленного сообщения. Указывает, откуда надо начинать чтение данных.

Библиотека:

libc

Описание:

Функции MsgReadv() и MsgReadv_r() вычитывают данные из сообщения, отправленного потоком, идентифицированным rcvid. Выполнение чтения возможно до отправки клиенту ответа. Клиент будет находиться в REPLY-блокированном состоянии. Выполнять чтение сообщения может любой поток процесс-получателя.

Данные функции идентичны за исключением способа возврата ошибок.

Передача данных выполняется немедленно, поток-читатель не блокируется. Состояние потока-отправителя не меняется.

При попытке чтения данных больше, чем размер доступного буфера клиента, функция вернет количество реально прочитанных байт.

Данные функции используются в следующих ситуациях:

После использования MsgReadv() необходимо вызвать MsgReply*(), чтобы разблокировать REPLY-блокированного клиента и завершить обмен сообщениями.

Состояния блокировки:

Отсутствует. В случае сетевого взаимодействия может получить управление поток с меньшим приоритетом.

Возвращаемое значение:

MsgReadv()
Если возникла ошибка функция возвращает -1, код ошибки записывается в errno.
MsgReadv_r()
Функция НЕ устанавливает errno. При возникновении ошибки функция возвращает один из представленных ниже кодов.

Коды ошибок:

EFAULT
Ошибка в адресном пространстве сервера при попытке доступа к буферам отправленного сообщения.
ESRCH
Поток, ассоциированный с rcvid не существует или отключил соединение от канала.
ESRVRFAULT
Ошибка при попытке ядра получить доступ к предоставленным буферам.

Классификация:

ЗОСРВ «Нейтрино»

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

iov_t, MsgRead(), MsgReceive(), MsgReceivev(), MsgReply(), MsgReplyv(), MsgWrite(), MsgWritev()




Предыдущий раздел: Описание API системной библиотеки