io\_uring\_prep\_tee(3) liburing Manual io\_uring\_prep\_tee(3)

# [NAME](#NAME)

io\_uring\_prep\_tee - prepare a tee request

# [SYNOPSIS](#SYNOPSIS)

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

```
void io_uring_prep_tee(struct io_uring_sqe *sqe,
                       int fd_in,
                       int fd_out,
                       unsigned int nbytes,
                       unsigned int splice_flags);
```

# [DESCRIPTION](#DESCRIPTION)

The [**io\_uring\_prep\_tee**(3)](/man/os/liburing/io_uring_prep_tee.3) function prepares a tee request. The submission queue entry *sqe* is setup to use as input the file descriptor *fd\_in* and as output the file descriptor *fd\_out* duplicating up to *nbytes* bytes worth of data. *splice\_flags* are modifier flags for the operation. See [**tee**(2)](/man/os/liburing/tee.2) for the generic splice flags.

If *fd\_out* is a direct descriptor, **IOSQE\_FIXED\_FILE** can be set in the SQE to indicate that. For the input file, the io\_uring specific **SPLICE\_F\_FD\_IN\_FIXED** can be set and *fd\_in* given as a registered file descriptor offset.

This function prepares an async [**tee**(2)](/man/os/liburing/tee.2) request. See that man page for details.

# [RETURN VALUE](#RETURN_VALUE)

None

# [ERRORS](#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.

# [NOTES](#NOTES)

Despite accepting an unsigned number of bytes, this function can transfer at most INT\_MAX bytes per call (the maximum for the underlying syscall interface). In practice, limits as low as 65536 have been observed (just like with [**tee**(2)](/man/os/liburing/tee.2) itself).

# [SEE ALSO](#SEE_ALSO)

[**io\_uring\_get\_sqe**(3)](/man/os/liburing/io_uring_get_sqe.3), [**io\_uring\_submit**(3)](/man/os/liburing/io_uring_submit.3), [**io\_uring\_register**(2)](/man/os/liburing/io_uring_register.2), [**splice**(2)](/man/os/liburing/splice.2), [**tee**(2)](/man/os/liburing/tee.2)

March 13, 2022 liburing-2.2

---

Document: io_uring_prep_tee(3) from liburing 2.15-r5 (Chainguard OS)
Source: https://github.com/axboe/liburing.git
