| # zx_stream_readv_at | 
 |  | 
 | ## NAME | 
 |  | 
 | <!-- Updated by update-docs-from-fidl, do not edit. --> | 
 |  | 
 | Read data from a stream at the given offset. | 
 |  | 
 | ## SYNOPSIS | 
 |  | 
 | <!-- Updated by update-docs-from-fidl, do not edit. --> | 
 |  | 
 | ```c | 
 | #include <zircon/syscalls.h> | 
 |  | 
 | zx_status_t zx_stream_readv_at(zx_handle_t handle, | 
 |                                uint32_t options, | 
 |                                zx_off_t offset, | 
 |                                zx_iovec_t* vector, | 
 |                                size_t num_vector, | 
 |                                size_t* actual); | 
 | ``` | 
 |  | 
 | ## DESCRIPTION | 
 |  | 
 | `zx_stream_readv_at()` attempts to read bytes from the stream, starting at the | 
 | given *offset*, into the buffers specified by *vector* and *num_vector*. If | 
 | successful, the number of bytes actually read are return via *actual*. | 
 |  | 
 | If the given *offset* is beyond the end of the stream, `zx_stream_readv_at()` | 
 | will succeed in reading zero bytes. | 
 |  | 
 | If a NULL *actual* is passed in, it will be ignored. | 
 |  | 
 | Does not advance the seek offset of the stream. | 
 |  | 
 | If the contents of *vector* change during this operation, if any of the buffers | 
 | overlap, or if any of the buffers overlap *vector*, the behavior is unspecified. | 
 |  | 
 | *options* is reserved for future use and must be 0. | 
 |  | 
 | ## RIGHTS | 
 |  | 
 | <!-- Updated by update-docs-from-fidl, do not edit. --> | 
 |  | 
 | *handle* must be of type **ZX_OBJ_TYPE_STREAM** and have **ZX_RIGHT_READ**. | 
 |  | 
 | ## RETURN VALUE | 
 |  | 
 | `zx_stream_readv_at()` returns **ZX_OK** on success, and writes into | 
 | *actual* (if non-NULL) the exact number of bytes read. | 
 |  | 
 | ## ERRORS | 
 |  | 
 | **ZX_ERR_BAD_HANDLE**  *handle* is not a valid handle. | 
 |  | 
 | **ZX_ERR_WRONG_TYPE**   *handle* is not a stream handle. | 
 |  | 
 | **ZX_ERR_ACCESS_DENIED**  *handle* does not have the **ZX_RIGHT_READ** right. | 
 |  | 
 | **ZX_ERR_INVALID_ARGS**  vector is an invalid `zx_iovec_t` or *options* is | 
 | nonzero. | 
 |  | 
 | **ZX_ERR_NOT_FOUND**  the *vector* address, or an address specified within | 
 | *vector* does not map to address in address space. | 
 |  | 
 | **ZX_ERR_BAD_STATE**  the underlying data source cannot be read. | 
 |  | 
 | ## SEE ALSO | 
 |  | 
 |  - [`zx_stream_create()`] | 
 |  - [`zx_stream_readv()`] | 
 |  - [`zx_stream_seek()`] | 
 |  - [`zx_stream_writev()`] | 
 |  - [`zx_stream_writev_at()`] | 
 |  | 
 | <!-- References updated by update-docs-from-fidl, do not edit. --> | 
 |  | 
 | [`zx_stream_create()`]: stream_create.md | 
 | [`zx_stream_readv()`]: stream_readv.md | 
 | [`zx_stream_seek()`]: stream_seek.md | 
 | [`zx_stream_writev()`]: stream_writev.md | 
 | [`zx_stream_writev_at()`]: stream_writev_at.md |