writev()

Записать последовательность байт в файл

Прототип:

#include <sys/uio.h>
ssize_t writev( int fildes,
const iov_t *iov,
int iovcnt );

Аргументы:

fildes
Дескриптор файла, в котором должна быть произведена запись.
iov
Массив объектов iov_t, который содержит данные для записи.
iovcnt
Количество элементов в массиве.

Библиотека:

libc

Описание:

Функция writev() аналогична write(), но получает данные из iovcnt областей памяти, указанных в полях массива iov[0], iov[1], ..., iov[iovcnt - 1].

Функция writev() всегда записывает область целиком, прежде чем переходить к следующей.

Максимальное количество элементов в массиве iov равно UIO_MAXIOV.


Note: Стоит принимать во внимание, что writev() игнорирует рекомендуемые блокировки, которые могут быть установлены функцией fcntl().

Если writev() прерывается сигналом до записи данных, функция возвращает значение -1, и устанавливает errno в EINTR. Однако, если writev() прерывается сигналом после успешной записи части данных, функция возвращает количество записанных байт.

Для более подробной информации см. the write().

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

Количество записанных байт.

Если возникла ошибка функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

EAGAIN
Флаг O_NONBLOCK установлен для файлового дескриптора, процесс будет задержан при операции записи.
EBADF
Файловый дескриптор fildes не является допустимым файловым дескриптором, который позволяет производить запись.
EFBIG
Файл является обычным файлом, nbytes больше 0, а начальная позиция больше или равна максимальному смещения, установленному в описании открытого файла.
EINTR
Операции записи была прервана сигналом, данные либо не были записаны, либо ресурс менеджер, отвественный за этот файл, не сообщил об успешной передаче части информации.
EINVAL
Аргумент iovcnt меньше или равен 0, или больше UIO_MAXIOV.
EIO
Проблема с записью на физическом уровне (например, поврежденный сектор на диске). Более точное объяснение зависит от используемого устройства.
ENOSPC
Нет свободного места на устройстве, которое содержит файл.
ENOSYS
Функция writev() не реализована для файловой системы, указанной в filedes.
EPIPE
Попытка записи в менеджер каналов pipe (или FIFO), который не доступен для чтения любым процессом, или открыт для записи только один из его концов. Сигнал SIGPIPE также был послан процессу.

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

POSIX 1003.1 X/Open Systems Interfaces Extension

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

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

iov_t, close(), creat(), dup(), dup2(), errno, fcntl(), lseek(), open(), pipe(), read(), readv(), select(), write()




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