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
Copyright © 2010-2024 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout