Function read [src]
Queues (but does not submit) an SQE to perform a read(2) or preadv(2) depending on the buffer type.
Reading into a ReadBuffer.buffer uses read(2)
Reading into a ReadBuffer.iovecs uses preadv(2)
If you want to do a preadv2(2) then set rw_flags on the returned SQE. See https://man7.org/linux/man-pages/man2/preadv2.2.html
Returns a pointer to the SQE.
Prototype
pub fn read( self: *IoUring, user_data: u64, fd: posix.fd_t, buffer: ReadBuffer, offset: u64, ) !*linux.io_uring_sqe
Parameters
self: *IoUring
user_data: u64
fd: posix.fd_t
buffer: ReadBuffer
offset: u64
Source
pub fn read(
self: *IoUring,
user_data: u64,
fd: posix.fd_t,
buffer: ReadBuffer,
offset: u64,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
switch (buffer) {
.buffer => |slice| sqe.prep_read(fd, slice, offset),
.iovecs => |vecs| sqe.prep_readv(fd, vecs, offset),
.buffer_selection => |selection| {
sqe.prep_rw(.READ, fd, 0, selection.len, offset);
sqe.flags |= linux.IOSQE_BUFFER_SELECT;
sqe.buf_index = selection.group_id;
},
}
sqe.user_data = user_data;
return sqe;
}