Считать последовательность байт из файла
#include <sys/uio.h>ssize_t readv( int fildes,const iov_t *iov,int iovcnt );
UIO_MAXIOV
.libc
Функция readv() пытается читать из файла, связанного с дескриптором открытого файла fildes, помещая данные в буферы iovcnt, указанные членами массива iov: iov[0], iov[1], ..., iov[iovcnt - 1].
В обычном файле или другом файле, в котором возможно перемещение, readv() начинает с позиции в файле, заданной смещением файла, связанным с fildes. Перед успешным завершением readv() смещение файла увеличивается на количество фактически прочитанных байт.
Функция readv() всегда полностью заполняет один буфер перед переходом к следующему.
![]() | Вызов readv() игнорирует рекомендательные блокировки, которые могли быть установлены функцией fcntl(). |
В файле, в котором невозможно перемещение, readv() начинает с текущей позиции.
При успешном завершении readv(), возвращаемое значение - это количество байт, фактически прочитанных и помещенных в буфер. Это число никогда не будет больше, чем объединенные размеры буферов iov, хотя оно может быть меньше по одной из следующих причин:
Если readv() прерывается сигналом перед чтением каких-либо данных, она возвращает значение -1
и устанавливает errno в значение EINTR
. Однако, если функция readv() прерывается сигналом после успешного чтения некоторых данных, она возвращает количество прочитанных байт.
Никакие данные не передаются за текущий конец файла. Если начальная позиция находится в конце файла или после него, readv() возвращает ноль. Если файл является специальным файлом устройства, результат последующих вызовов readv() будет работать в зависимости от текущего состояния устройства (то есть конец файла является временным).
При попытке чтения из пустого канала или FIFO:
0
, чтобы указать конец файла.
O_NONBLOCK
, readv() возвращает -1
и устанавливает для errno значение EAGAIN
.
O_NONBLOCK
очищен, read() блокируется до тех пор, пока некоторые данные не будут записаны, или канал будет закрыт всеми процессами, открывшими его для записи. При попытке чтения из файла (кроме канала или FIFO), который поддерживает неблокирующее чтение и в настоящее время не имеет доступных данных:
O_NONBLOCK
, readv() возвращает -1
и устанавливает для errno значение EAGAIN
.
O_NONBLOCK
очищен, readv() блокируется до тех пор, пока не станет доступна часть данных.
O_NONBLOCK
не действует, если часть данных доступна. При вызове readv() для части файла до конца файла, которая не была записана, она возвращает байты с нулевым значением.
Если readv() завершается успешно, поле st_atime файла помечается для обновления.
Число считанных байт данных. Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
O_NONBLOCK
установлен для дескриптора файла, и процесс будет задержан в операции чтения. UIO_MAXIOV
. POSIX 1003.1 X/Open Systems Interfaces Extension
iov_t, close(), creat(), dup(), dup2(), errno, fcntl(), lseek(), open(), pipe(), read(), readblock(), select(), write(), writev()
Предыдущий раздел: Описание API системной библиотеки