pub fn splice(
fd_in: BorrowedFd<'_>,
offset_in: Option<&mut u64>,
fd_out: BorrowedFd<'_>,
offset_out: Option<&mut u64>,
length: usize,
flags: SpliceFlags,
) -> Result<usize, Errno>Expand description
Transfère jusqu’à length octets de fd_in vers fd_out sans copie
userspace (zero-copy).
Wrappeur de splice(2) (Linux 2.6.17+). Au moins un des deux FDs
doit être un pipe ; sinon le kernel retourne EINVAL.
Si offset_in / offset_out est None, la position courante du FD est
utilisée et avancée. Si Some, la position donnée est utilisée sans
modifier la position courante du FD.
§Parameters
fd_in: FD source.offset_in: offset dansfd_in, ouNonepour la position courante.fd_out: FD destination.offset_out: offset dansfd_out, ouNonepour la position courante.length: nombre maximum d’octets à transférer.flags: drapeaux [SpliceFlags].
§Errors
EINVAL: nifd_innifd_outn’est un pipe, ou flags invalides.EAGAIN: modeNONBLOCKet l’opération bloquerait.EINTR: interrompu par un signal (pas de retry automatique).EBADF: FD invalide ou mode d’accès incorrect.ESPIPE:offset_innon-nul sur un pipe (les pipes ne sont pas seekables).
§Examples
use air_sys_syscall::ipc::{pipe2, splice};
use air_sys_types::{PipeFlags, SpliceFlags};
use air_sys_types::fd::AsFd;
let (read_fd, write_fd) = pipe2(PipeFlags::CLOEXEC).expect("pipe2");
// Connecter un fichier source au pipe...
let _ = splice(
read_fd.as_fd(), None,
write_fd.as_fd(), None,
4096,
SpliceFlags::empty(),
);