Scroll to navigation

io_uring_prep_readv_fixed(3) liburing Manual io_uring_prep_readv_fixed(3)

NAME

io_uring_prep_readv_fixed - prepare a vectored read using fixed buffers

SYNOPSIS

#include <liburing.h>
void io_uring_prep_readv_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_readv_fixed(3) function prepares a vectored read request using fixed (registered) buffers. The submission queue entry sqe is setup to use the file descriptor fd to start reading nr_vecs iovecs from the file position offset.

The iovecs argument points to an array of iovec structures describing the read buffers. All buffers must be part of the registered buffer set at index buf_index, previously registered with io_uring_register_buffers(3).

The flags argument can contain any per-request flags, such as RWF_NOWAIT or other flags supported by preadv2(2).

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 read on success. On error, a negative errno value is returned.

NOTES

This function accepts an array of iovec's with a size_t number of bytes each, but io_uring_cqe's result code is an __s32 value, so in theory a short read with a large enough iov_len value could generate an ambiguous return. But the number of bytes actually transferred has the same limit as read(2) so this cannot happen in practice.

SEE ALSO

io_uring_get_sqe(3), io_uring_submit(3), io_uring_prep_readv(3), io_uring_prep_readv2(3), io_uring_prep_read_fixed(3), io_uring_prep_writev_fixed(3), io_uring_register_buffers(3)

January 18, 2025 liburing-2.10