---
name: "io_uring_prep_tee"
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_tee"
---

# io\_uring\_prep\_tee(3)

prepare a tee request

## NAME

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

## 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

The [**io\_uring\_prep\_tee**(3)](/io_uring_prep_tee/3.md) 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)](/tee/2.md) 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)](/tee/2.md) 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.

## 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)](/tee/2.md) itself).

## SEE ALSO

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