MsgWritev(), MsgWritev_r()

Отправить ответ

Прототип:

#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 );

Аргументы:

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

Библиотека:

libc

Описание:

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

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

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

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

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

Использование одиночного вызова MsgReply*() эффективнее, чем использование вызовов MsgWritev() с последующим вызовом MsgReply*().

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

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

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

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

Коды ошибок:

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

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

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

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

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

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




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