read(2)
NAME
read, readv, pread, preadv - read input
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <sys/types.h> #include <sys/uio.h> #include <unistd.h> ssize_t read(int d, void *buf, size_t nbytes); ssize_t pread(int d, void *buf, size_t nbytes, off_t offset); ssize_t readv(int d, const struct iovec *iov, int iovcnt); ssize_t preadv(int d, const struct iovec *iov, int iovcnt, off_t offset);
DESCRIPTION
- The read() system call attempts to read nbytes of data from
- the object
referenced by the descriptor d into the buffer pointed to by - buf. The
readv() system call performs the same action, but scatters - the input data
into the iovcnt buffers specified by the members of the iov - array:
iov[0], iov[1], ..., iov[iovcnt-1]. The pread() and - preadv() system
calls perform the same functions, but read from the speci - fied position in
the file without modifying the file pointer. - For readv() and preadv(), the iovec structure is defined as:
struct iovec {void *iov_base; /* Base address. */
size_t iov_len; /* Length. */- };
- Each iovec entry specifies the base address and length of an
- area in memory where data should be placed. The readv() system call
- will always
fill an area completely before proceeding to the next. - On objects capable of seeking, the read() starts at a posi
- tion given by
the pointer associated with d (see lseek(2)). Upon return - from read(),
the pointer is incremented by the number of bytes actually - read.
- Objects that are not capable of seeking always read from the
- current
position. The value of the pointer associated with such an - object is
undefined. - Upon successful completion, read(), readv(), pread() and
- preadv() return
the number of bytes actually read and placed in the buffer. - The system
guarantees to read the number of bytes requested if the de - scriptor references a normal file that has that many bytes left before the
- end-of-file,
but in no other case.
RETURN VALUES
- If successful, the number of bytes actually read is re
- turned. Upon reading end-of-file, zero is returned. Otherwise, a -1 is re
- turned and the
global variable errno is set to indicate the error.
ERRORS
- The read(), readv(), pread() and preadv() system calls will
- succeed
unless: - [EBADF] The d argument is not a valid file or
- socket descrip
- tor open for reading.
- [ECONNRESET] The d argument refers to a socket, and
- the remote
- socket end is forcibly closed.
- [EFAULT] The buf argument points outside the allo
- cated address
- space.
- [EIO] An I/O error occurred while reading from
- the file sys
- tem.
- [EINTR] A read from a slow device was interrupted
- before any
- data arrived by the delivery of a signal.
- [EINVAL] The pointer associated with d was nega
- tive.
- [EAGAIN] The file was marked for non-blocking I/O,
- and no data
- were ready to be read.
- [EISDIR] The file descriptor is associated with a
- directory
- residing on a file system that does not
- allow regular
read operations on directories (e.g. - NFS).
- [EOPNOTSUPP] The file descriptor is associated with a
- file system
- and file type that do not allow regular
- read operations on it.
- [EOVERFLOW] The file descriptor is associated with a
- regular file,
- nbytes is greater than 0, offset is be
- fore the end-offile, and offset is greater than or equal
- to the offset maximum established for this file
- system.
- [EINVAL] The value nbytes is greater than INT_MAX.
- In addition, readv() and preadv() may return one of the fol
- lowing errors:
- [EINVAL] The iovcnt argument was less than or
- equal to 0, or
- greater than IOV_MAX.
- [EINVAL] One of the iov_len values in the iov ar
- ray was nega
- tive.
- [EINVAL] The sum of the iov_len values in the iov
- array over
- flowed a 32-bit integer.
- [EFAULT] Part of the iov array points outside the
- process's
- allocated address space.
- The pread() and preadv() system calls may also return the
- following
errors: - [EINVAL] The offset value was negative.
- [ESPIPE] The file descriptor is associated with a
- pipe, socket,
- or FIFO.
SEE ALSO
- dup(2), fcntl(2), getdirentries(2), open(2), pipe(2), se
- lect(2),
socket(2), socketpair(2), fread(3), readdir(3)
STANDARDS
- The read() system call is expected to conform to ISO/IEC
- 9945-1:1990
(``POSIX.1''). The readv() and pread() system calls are ex - pected to conform to X/Open Portability Guide Issue 4.2 (``XPG4.2'').
HISTORY
- The preadv() system call appeared in FreeBSD 6.0. The
- pread() function
appeared in AT&T System V.4 UNIX. The readv() system call - appeared in
4.2BSD. The read() function appeared in Version 6 AT&T - UNIX.
- BSD October 16, 2004