home | help
READ(2) 		       System Calls Manual			 READ(2)

NAME
     read, readv -- read input

SYNOPSIS
     #include <unistd.h>
     #include <sys/types.h>
     #include <sys/uio.h>

     ssize_t
     read(int d, char *buf, size_t nbytes);

     int
     readv(int d, struct iovec *iov, int iovcnt);

DESCRIPTION
     Read()  attempts  to  read nbytes of data from the object referenced by the
     descriptor d into the buffer pointed to by buf.  Readv() 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].

     For readv(), the iovec structure is defined as
	   struct iovec {
		   caddr_t iov_base;
		   int	   iov_len;
	   };

     Each iovec entry specifies the base address and length of an area in memory
     where data should be placed.  Readv() will always fill an	area  completely
     before proceeding to the next.

     On objects capable of seeking, the read() starts at a position 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  posi-
     tion.   The  value  of  the pointer associated with such an object is unde-
     fined.

     Upon successful completion, read() and 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.

RETURN VALUES
     If  successful, the number of bytes actually read is returned. Upon reading
     end-of-file, zero is returned.  Otherwise, a -1 is returned and the  global
     variable errno is set to indicate the error.

ERRORS
     Read() and readv() will succeed unless:

     [EBADF]		D  is  not  a  valid  file or socket descriptor open for
			reading.

     [EFAULT]		Buf points outside the allocated 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 negative.

     [EWOULDBLOCK]	The file was marked for non-blocking I/O,  and	no  data
			were ready to be read.

     In addition, readv() may return one of the following errors:

     [EINVAL]		Iovcnt was less than or equal to 0, or greater than 16.

     [EINVAL]		One of the iov_len values in the iov array was negative.

     [EINVAL]		The  sum  of  the  iov_len values in the iov array over-
			flowed a 32-bit integer.

     [EFAULT]		Part of the iov points outside the  process's  allocated
			address space.

SEE ALSO
     dup(2), fcntl(2), open(2), pipe(2), select(2), socket(2), socketpair(2)

STANDARDS
     Read() is expected to conform to IEEE Std 1003.1-1988 ("POSIX").

HISTORY
     The  readv()  function  call  appeared in 4.2BSD.	A read function call ap-
     peared in Version 6 AT&T UNIX.

4th Berkeley Distribution	 March 10, 1991 			 READ(2)

home | help