NAME |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |SEE ALSO |NOTES |COLOPHON | |
io_uring_prep_splice(3) liburing Manualio_uring_prep_splice(3)io_uring_prep_splice - prepare an splice request
#include <fcntl.h>#include <liburing.h>void io_uring_prep_splice(struct io_uring_sqe *sqe,intfd_in,int64_toff_in,intfd_out,int64_toff_out,unsigned intnbytes,unsigned intsplice_flags);
Theio_uring_prep_splice(3) function prepares a splice request. The submission queue entrysqe is setup to use as input the file descriptorfd_in at offsetoff_in, splicing data to the file descriptor atfd_out and at offsetoff_out.nbytes bytes of data should be spliced between the two descriptors.splice_flags are modifier flags for the operation. Seesplice(2) for the generic splice flags. If thefd_out descriptor,IOSQE_FIXED_FILEcan be set in the SQE to indicate that. For the input file, the io_uring specificSPLICE_F_FD_IN_FIXEDcan be set insplice_flags andfd_in given as a registered file descriptor offset. Iffd_in refers to a pipe,off_in is ignored and must be set to -1. Iffd_in does not refer to a pipe andoff_in is -1, thennbytes are read fromfd_in starting from the file offset, which is incremented by the number of bytes read. Iffd_in does not refer to a pipe andoff_in is not -1, then the starting offset offd_in will beoff_in. The same rules apply tofd_out andoff_out. This function prepares an asyncsplice(2) request. See that man page for details.
None
The CQEres 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-1on failure and seterrno to the actual error value, io_uring never useserrno. Instead it returns the negatederrno directly in the CQEres field.
io_uring_get_sqe(3),io_uring_submit(3),io_uring_register(2),splice(2)
Note that even iffd_in orfd_out refers to a pipe, the splice operation can still fail withEINVALif one of the fd doesn't explicitly support splice operation, e.g. reading from terminal is unsupported from kernel 5.7 to 5.11.
This page is part of theliburing (A library for io_uring) project. Information about the project can be found at ⟨https://github.com/axboe/liburing⟩. If you have a bug report for this manual page, send it to io-uring@vger.kernel.org. This page was obtained from the project's upstream Git repository ⟨https://github.com/axboe/liburing⟩ on 2025-08-11. (At that time, the date of the most recent commit that was found in the repository was 2025-08-02.) If you discover any rendering problems in this HTML version of the page, or you believe there is a better or more up-to-date source for the page, or you have corrections or improvements to the information in this COLOPHON (which isnot part of the original manual page), send a mail to man-pages@man7.orgliburing-2.2 March 13, 2022io_uring_prep_splice(3)Pages that refer to this page:io_uring_prep_splice(3)
HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface. For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere. Hosting byjambit GmbH. | ![]() |