Man page - splice(2)

Packages contains this manual

Available languages:

en fr pl ja ru

Manual

splice

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
NOTES
EXEMPLES
VOIR AUSSI
TRADUCTION

NOM

splice - Copier des données vers/depuis un tube

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#define _GNU_SOURCE /* See feature_test_macros(7) */
#define _FILE_OFFSET_BITS 64
#include <fcntl.h>

ssize_t splice(int fd_in , off_t *_Nullable off_in ,
int
fd_out , off_t *_Nullable off_out ,
size_t
len , unsigned int flags );

DESCRIPTION

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 :

-

Si fd_in correspond Ă  un tube, alors off_in doit ĂȘtre NULL.

-

Si fd_in ne correspond pas à un tube et si off_in est NULL, alors les octets sont lus depuis in_fd à partir de la position actuelle dans le fichier et la position résultante est mise à jour de façon appropriée.

-

Si fd_in ne correspond pas Ă  un tube et off_in n’est pas NULL, alors off_in doit pointer vers un tampon qui indique la position Ă  partir de laquelle les donnĂ©es seront lues dans fd_in ; dans ce cas, la position dans fd_in n’est pas modifiĂ©e.

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 :
SPLICE_F_MOVE

Essayer de dĂ©placer des pages au lieu de les copier. Ceci n’est qu’une astuce pour le au noyau : des pages peuvent quand mĂȘme ĂȘtre copiĂ©es si le noyau ne peut pas dĂ©placer les pages du tube ou si les tampons du tube ne correspondent pas Ă  des pages entiĂšres. La premiĂšre implĂ©mentation de cet attribut comportait un bogue : ainsi, Ă  partir de Linux 2.6.21 il ne fait rien (mais est toujours permis dans un appel Ă  splice ()) ; dans le futur, une implĂ©mentation correcte pourra ĂȘtre restaurĂ©e.

SPLICE_F_NONBLOCK

Ne pas bloquer sur les entrĂ©es-sorties. Cela rend les opĂ©rations de splice sur le tube non bloquantes, mais splice () peut tout de mĂȘme bloquer car les descripteurs de fichier sur lesquels il opĂšre peuvent bloquer (sauf s’ils ont l’attribut O_NONBLOCK ).

SPLICE_F_MORE

Des donnĂ©es supplĂ©mentaires seront copiĂ©es plus tard. C’est une astuce utile lorsque fd_out correspond Ă  un socket (voir aussi la description de MSG_MORE dans send (2) et la description de TCP_CORK dans tcp (7)).

SPLICE_F_GIFT

N’a pas d’effet pour splice () ; consultez vmsplice (2).

VALEUR RENVOYÉE

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.

ERREURS

EAGAIN

SPLICE_F_NONBLOCK Ă©tait indiquĂ© dans flags ou un des descripteurs de fichier a Ă©tĂ© marquĂ© comme non bloquant ( O_NONBLOCK ), et l’opĂ©ration pourrait bloquer.

EBADF

Au moins un des descripteurs de fichier n’est pas valable, ou n’a pas le mode de lecture ou d’écriture appropriĂ©.

EINVAL

Le systĂšme de fichiers cible ne prend pas en charge l’opĂ©ration splice ().

EINVAL

Le fichier cible est ouvert en mode ajout.

EINVAL

Aucun des descripteurs de fichier ne correspond Ă  un tube.

EINVAL

Une position a été donnée pour un périphérique non adressable (par exemple un tube).

EINVAL

fd_in ou fd_out font rĂ©fĂ©rence au mĂȘme tube.

ENOMEM

Plus assez de mémoire.

ESPIPE

off_in ou off_out est différent de NULL, mais le descripteur de fichier correspondant pointe vers un tube.

STANDARDS

Linux.

HISTORIQUE

Linux 2.6.17, glibc 2.5.

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.

NOTES

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 :
splice
()

déplace des données depuis le tampon vers un descripteur de fichier arbitraire, ou vice versa, ou bien depuis un tampon vers un autre.

tee (2)

« copie » les donnĂ©es d’un tampon vers un autre.

vmsplice (2)

« copie » des donnĂ©es de l’espace utilisateur vers le tampon.

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.

_FILE_OFFSET_BITS doit ĂȘtre dĂ©fini à 64 dans du code qui utilise off_in ou off_out diffĂ©rent de NULL, ou qui rĂ©cupĂšre l’adresse de splice , si le code est destinĂ© Ă  ĂȘtre protable sur des plateformes x86 et ARM 32 bits classiques oĂč la taille par dĂ©faut de off_t est de 32 bits.

EXEMPLES

Consultez tee (2).

VOIR AUSSI

copy_file_range (2), sendfile (2), tee (2), vmsplice (2), pipe (7)

TRADUCTION

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 .