/// `splice(fd_in, off_in, fd_out, off_out, len, flags)`—Transfer data /// between a file and a pipe. /// /// This function transfers up to `len` bytes of data from the file descriptor /// `fd_in` to the file descriptor `fd_out`, where one of the file descriptors /// must refer to a pipe. /// /// `off_*` must be `None` if the corresponding fd refers to a pipe. Otherwise /// its value points to the starting offset to the file, from which the data is /// read/written. On success, the number of bytes read/written is added to the /// offset. /// /// Passing `None` causes the read/write to start from the file offset, and the /// file offset is adjusted appropriately. /// /// # References /// - [Linux] /// /// [Linux]: https://man7.org/linux/man-pages/man2/splice.2.html #[cfg(linux_kernel)] #[inline] pubfn splice<FdIn: AsFd, FdOut: AsFd>(
fd_in: FdIn,
off_in: Option<&mut u64>,
fd_out: FdOut,
off_out: Option<&mut u64>,
len: usize,
flags: SpliceFlags,
) -> io::Result<usize> {
backend::pipe::syscalls::splice(fd_in.as_fd(), off_in, fd_out.as_fd(), off_out, len, flags)
}
/// `vmsplice(fd, bufs, flags)`—Transfer data between memory and a pipe. /// /// If `fd` is the write end of the pipe, the function maps the memory pointer /// at by `bufs` to the pipe. /// /// If `fd` is the read end of the pipe, the function writes data from the pipe /// to said memory. /// /// # Safety /// /// If the memory must not be mutated (such as when `bufs` were originally /// immutable slices), it is up to the caller to ensure that the write end of /// the pipe is placed in `fd`. /// /// Additionally if `SpliceFlags::GIFT` is set, the caller must also ensure /// that the contents of `bufs` in never modified following the call, and that /// all of the pointers in `bufs` are page aligned, and the lengths are /// multiples of a page size in bytes. /// /// # References /// - [Linux] /// /// [Linux]: https://man7.org/linux/man-pages/man2/vmsplice.2.html #[cfg(linux_kernel)] #[inline] pubunsafefn vmsplice<PipeFd: AsFd>(
fd: PipeFd,
bufs: &[IoSliceRaw<'_>],
flags: SpliceFlags,
) -> io::Result<usize> {
backend::pipe::syscalls::vmsplice(fd.as_fd(), bufs, flags)
}
/// `tee(fd_in, fd_out, len, flags)`—Copy data between pipes without /// consuming it. /// /// This reads up to `len` bytes from `in_fd` without consuming them, and /// writes them to `out_fd`. /// /// # References /// - [Linux] /// /// [Linux]: https://man7.org/linux/man-pages/man2/tee.2.html #[cfg(linux_kernel)] #[inline] pubfn tee<FdIn: AsFd, FdOut: AsFd>(
fd_in: FdIn,
fd_out: FdOut,
len: usize,
flags: SpliceFlags,
) -> io::Result<usize> {
backend::pipe::syscalls::tee(fd_in.as_fd(), fd_out.as_fd(), len, flags)
}
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.23Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-06-18)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.