---
name: "readv"
section: "3"
platform: "linux"
package: "manpages-dev"
version: "1.70-1"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/readv/3"
---

# readv(3)

read or write data into multiple buffers

## NAME

readv, writev - read or write data into multiple buffers

## SYNOPSIS

```
#include <sys/uio.h>

int readv(int filedes, const struct iovec *vector,
          size_t count);

int writev(int filedes, const struct iovec *vector,
          size_t count);
```

## DESCRIPTION

The **readv()** function reads *count* blocks from the file associated with the file descriptor *filedes* into the multiple buffers described by *vector*.

The **writev()** function writes at most *count* blocks described by *vector* to the file associated with the file descriptor *filedes*.

The pointer *vector* points to a **struct iovec** defined in **\<sys/uio.h\>** as

```
struct iovec {
void *iov_base;   /* Starting address */
size_t iov_len;   /* Number of bytes */
};
```

Buffers are processed in the order *vector\[0\]*, *vector\[1\]*, ... *vector\[count\]*.

The **readv()** function works just like [**read**(2)](/read/2.md) except that multiple buffers are filled.

The **writev()** function works just like [**write**(2)](/write/2.md) except that multiple buffers are written out.

## RETURN VALUE

The **readv()** function returns the number of bytes or -1 on error; the **writev()** function returns the number of bytes written.

## ERRORS

The **readv()** and  **writev()** functions can fail and set *errno* to the following values:

- **EBADF**

  *fd* is not a valid file descriptor.

- **EINVAL**

  *fd* is unsuitable for reading (for **readv()**) or writing (for **writev()**).

- **EFAULT**

  *buf* is outside the processes' address space.

- **EAGAIN**

  Non-blocking I/O had been selected in the  **open()** call, and reading or writing could not be done immediately.

- **EINTR**

  Reading or writing was interrupted before any data was transferred.

## CONFORMING TO

unknown

## BUGS

It is not advisable to mix calls to functions like **readv()** or **writev()**, which operate on file descriptors, with the functions from the stdio library; the results will be undefined and probably not what you want.

## SEE ALSO

[**read**(2)](/read/2.md), [**write**(2)](/write/2.md)
