splice(2) | System Calls Manual | splice(2) |
splice - Copier des données vers/depuis un tube
Bibliothèque C standard (libc, -lc)
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */ #include <fcntl.h>
ssize_t splice(int fd_in, off64_t *_Nullable off_in, int fd_out, off64_t *_Nullable off_out, size_t len, unsigned int flags);
splice() déplace des données entre deux descripteurs de fichier sans les copier entre l'espace d'adressage noyau et l'espace utilisateur. Jusqu'à len octets de données sont transférés du descripteur de fichier fd_in au descripteur de fichier fd_out, où l'un des descripteurs de fichier doit correspondre à un tube.
Les sémantiques suivantes s'appliquent à fd_in et off_in :
Il en va de même pour fd_out et off_out.
L'argument flags est un masque de bits constitué par un OU binaire entre une ou plusieurs des valeurs suivantes :
S'il réussit, splice() renvoie le nombre d'octets transférés dans ou à partir du tube.
Une valeur de retour de 0 signifie la fin de l'entrée. Si fd_in correspond à un tube, alors cela signifie qu'il n'y avait pas de données à transférer et que cela n'aurait pas de sens de bloquer parce qu'il n'y a pas d'écrivain connecté à l'extrémité d'écriture du tube.
En cas d'erreur, splice() renvoie -1 et errno est positionné pour indiquer la cause de l'erreur.
L'appel système splice() est apparu dans Linux 2.6.17, la prise en charge de la bibliothèque a été ajoutée dans la glibc 2.5.
Cet appel système est spécifique à Linux.
Les trois appels système splice(), vmsplice(2) et tee(2) fournissent aux programmes utilisateur le contrôle complet d'un tampon arbitraire du noyau, implémenté côté noyau en utilisant le même type de tampons que pour les tubes. Ces appels système assurent les tâches suivantes :
Bien qu'il soit question de copie, les vraies copies sont en général évitées. Le noyau implémente en effet le tampon d'un tube comme un ensemble de pointeurs vers des pages de mémoire noyau pouvant être référencées plusieurs fois. Le noyau crée des « copies » des pages dans un tampon en créant de nouveaux pointeurs (pour le tampon de sortie) pointant vers les pages, et en incrémentant les compteurs de références des pages : seuls les pointeurs sont copiés, et pas les pages du tampon.
Dans Linux 2.6.30 et précédents, précisément un des descripteurs de fichier fd_in ou fd_out était requis d'être un tube. Depuis Linux 2.6.31, les deux arguments peuvent correspondre à des tubes.
Consultez tee(2).
copy_file_range(2), sendfile(2), tee(2), vmsplice(2), pipe(7)
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.
5 février 2023 | Pages du manuel de Linux 6.03 |