readv, writev - считывает или записывает вектор
НАЗВАНИЕreadv, writev - считывает или записывает вектор
СИНТАКСИС
#include int readv(int fd, const struct iovec
*vector, int count);
int writev(int fd, const struct iovec *vector, int count);
struct iovec {
__ptr_t iov_base; /* Starting address */
size_t iov_len; /* Length in bytes */
};
ОПИСАНИЕ
readv читает данные файлового описателя fd и помещает
результат в буферы, описанные в vector. Количество буферов
задается параметром count. Буферы заполняются в заданном
порядке. Эта функция работает аналогично read, исключая
то, что данные помещаются в vector, а не в один большой
буфер. writev записывает данные в файловый описатель fd
из буферов, описанных в vector. Количество буферов
задается параметром count. Буферы заполняются в заданном
порядке. Эта функция работает аналогично write, исключая
то, что данные берутся из vector, а не из одного большого
буфера.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При удачном завершении вызова readv возвращает количество
прочитанных байтов. При удачном завершении вызова writev
возвращает количество записанных байтов. При ошибке
возвращается -1, а переменной errno присваивается номер
ошибки.
КОДЫ ОШИБОК
EINVAL Был задан неправильный аргумент. Параметр count,
например, может превышать MAX_IOVEC или быть равен
нулю. fd может также указывать на объект, не
поддерживающий чтение (в случае с readv) или запись
(в случае с writev).
EFAULT "Ошибка сегментации." Скорее всего, vector или один
из указателей iov_base обозначает нераспределенную
память.
EBADF Неправильный описатель файла fd.
EINTR Системный вызов был прерван сигналом до начала
чтения/записи.
EAGAIN Используется неблокируемый ввод/вывод (с помощью
O_NONBLOCK), а при вызове функции не было данных
для немедленного чтения (или описатель файла fd
указывает на заблокированный объект).
EISDIR fd указывает на каталог.
EOPNOTSUPP
fd указывает на сокет или устройство, не
поддерживающее чтение/запись.
ENOMEM Системе не хватает памяти для исполнения запроса.
Могут возникнуть и другие ошибки, зависящие от типа
объекта, на который указывает fd.
СООТВЕТСТВИЕ СТАНДАРТАМ
4.4BSD (функции readv и writev впервые появились в BSD
4.2), Unix98. libc5 в Linux использует size_t в качестве
параметра count, что является логичным, но не
соответствует стандарту.