+and
+.I readv
+return the number of bytes actually read and placed in the buffer.
+The system guarantees to read the number of bytes requested if
+the descriptor references a normal file that has that many bytes left
+before the end-of-file, but in no other case.
+.PP
+If the returned value is 0, then
+end-of-file has been reached.
+.SH "RETURN VALUE
+If successful, the
+number of bytes actually read is returned.
+Otherwise, a \-1 is returned and the global variable
+.I errno
+is set to indicate the error.
+.SH "ERRORS
+.I Read
+and
+.I readv
+will fail if one or more of the following are true:
+.TP 15
+[EBADF]
+\fID\fP is not a valid file or socket descriptor open for reading.
+.TP 15
+[EFAULT]
+\fIBuf\fP points outside the allocated address space.
+.TP 15
+[EIO]
+An I/O error occurred while reading from the file system.
+.TP 15
+[EINTR]
+A read from a slow device was interrupted before
+any data arrived by the delivery of a signal.
+.TP 15
+[EINVAL]
+The pointer associated with
+.I d
+was negative.
+.TP 15
+[EWOULDBLOCK]
+The file was marked for non-blocking I/O,
+and no data were ready to be read.
+.PP
+In addition,
+.I readv
+may return one of the following errors:
+.TP 15
+[EINVAL]
+.I Iovcnt
+was less than or equal to 0, or greater than 16.
+.TP 15
+[EINVAL]
+One of the
+.I iov_len
+values in the
+.I iov
+array was negative.
+.TP 15
+[EINVAL]
+The sum of the
+.I iov_len
+values in the
+.I iov
+array overflowed a 32-bit integer.
+.TP 15
+[EFAULT]
+Part of the \fIiov\fP points outside the process's allocated address space.
+.SH "SEE ALSO"
+dup(2), fcntl(2), open(2), pipe(2), select(2), socket(2), socketpair(2)