io_uring_prep_pipe(3)

NAME
io_uring_prep_pipe - prepare a pipe creation request

SYNOPSIS
#include <liburing.h>

void io_uring_prep_pipe(struct io_uring_sqe *sqe,
                        int *fds,
                        int pipe_flags);

void io_uring_prep_pipe_direct(struct io_uring_sqe *sqe,
                               int *fds,
                               int pipe_flags,
                               unsigned int file_index);

DESCRIPTION

The io_uring_prep_pipe(3) function prepares a pipe creation request. The submission queue entry sqe is setup to create a pipe with the created descriptors being copied to the array indicated by fds and using pipe_flags as the pipe creation flags. See pipe2(2) for details on the flags accepted.

The io_uring_prep_pipe_direct(3) function works in the same way, however it uses fixed/registered file descriptors rather than normal file descriptors. This helper takes an additional file_index argument, which can set to either an explicit direct descriptor offset to create the two pipe file descriptors at, or it can be set to IORING_FILE_INDEX_ALLOC to let io_uring pick any available descriptors for the read and write side of the pipe. If a specific index is given, the read side of the pipe will be created at that offset, if free, and the write side will be created at the next (+1) index. Both of these must be currently unused, or the operation will fail. Also see io_uring_prep_accept_direct(3) or io_uring_prep_socket_direct(3) for details on the file_index parameter.

For both the direct and normal file descriptor pipe request, the resulting input/read side of the pipe will be stored in fds[0] and the output/write side of the pipe will be stored in fds[1] upon successful completion of this request.

This function prepares an async pipe2(2) request. See that man page for details.

RETURN VALUE
None

ERRORS
The CQE res field will contain the result of the operation. See the related man page for details on possible values. Note that where synchronous system calls will return -1 on failure and set errno to the actual error value, io_uring never uses errno. Instead it returns the negated errno directly in the CQE res field.

SEE ALSO
io_uring_get_sqe(3), io_uring_submit(3), pipe2(2), io_uring_prep_accept_direct(3), io_uring_prep_socket_direct(3)