---
name: "io_uring_prep_writev_fixed"
section: "3"
platform: "linux"
package: "liburing"
version: "2.15-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/io_uring_prep_writev_fixed"
---

# io\_uring\_prep\_writev\_fixed(3)

prepare a vectored write using fixed buffers

## NAME

io\_uring\_prep\_writev\_fixed - prepare a vectored write using fixed buffers

## SYNOPSIS

```
#include <liburing.h>
```

**void io\_uring\_prep\_writev\_fixed(struct io\_uring\_sqe \****sqe***,**                                 **int** *fd***,**                                 **const struct iovec \****iovecs***,**                                 **unsigned** *nr\_vecs***,**                                 **\_\_u64** *offset***,**                                 **int** *flags***,**                                 **int** *buf\_index***);**

## DESCRIPTION

The [**io\_uring\_prep\_writev\_fixed**(3)](/io_uring_prep_writev_fixed/3.md) function prepares a vectored write request using fixed (registered) buffers. The submission queue entry *sqe* is setup to use the file descriptor *fd* to start writing *nr\_vecs* iovecs from the file position *offset*.

The *iovecs* argument points to an array of iovec structures describing the write buffers. All buffers must be part of the registered buffer set at index *buf\_index*, previously registered with [**io\_uring\_register\_buffers**(3)](/io_uring_register_buffers/3.md).

The *flags* argument can contain any per-request flags, such as **RWF\_APPEND** or other flags supported by [**pwritev2**(2)](/pwritev2/2.md).

Using fixed buffers avoids the overhead of mapping buffers for each I/O operation, improving performance for applications that reuse the same buffers.

## RETURN VALUE

None

## ERRORS

The CQE *res* field will contain the result of the operation, the number of bytes written on success. On error, a negative errno value is returned.

## NOTES

Despite accepting an array of iovec's with a size\_t number of bytes each, this function can transfer at most INT\_MAX bytes per call (the maximum for the underlying syscall interface).

## SEE ALSO

[**io\_uring\_get\_sqe**(3)](/io_uring_get_sqe/3.md), [**io\_uring\_submit**(3)](/io_uring_submit/3.md), [**io\_uring\_prep\_writev**(3)](/io_uring_prep_writev/3.md), [**io\_uring\_prep\_writev2**(3)](/io_uring_prep_writev2/3.md), [**io\_uring\_prep\_write\_fixed**(3)](/io_uring_prep_write_fixed/3.md), [**io\_uring\_prep\_readv\_fixed**(3)](/io_uring_prep_readv_fixed/3.md), [**io\_uring\_register\_buffers**(3)](/io_uring_register_buffers/3.md)
