vmsplice - Raccorder des pages utilisateur à un tube ou à partir
d'un tube
Bibliothèque C standard (
libc,
-lc)
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */
#include <fcntl.h>
ssize_t vmsplice(int fd, const struct iovec *iov,
size_t nr_segs, unsigned int flags);
Si
fd est ouvert en écriture, l'appel système
vmsplice() projette les
nr_segs segments de mémoire
utilisateur décrits par
iov dans un tube. Si
fd est
ouvert en lecture, l'appel système
vmsplice() remplit des
segments de mémoire utilisateur décrits par
iov à
partir d'un tube. Le descripteur de fichier
fd doit faire
référence à un tube.
Le pointeur
iov pointe vers un tableau de structures
iovec comme
décrit dans
iovec(3type).
L'argument
flags est un masque binaire constitué par un
OU
binaire entre une ou plusieurs des valeurs suivantes :
- SPLICE_F_MOVE
- Non utilisé pour vmsplice() ;
consultez splice(2).
- SPLICE_F_NONBLOCK
- Ne pas bloquer pendant les entrées-sorties ;
consultez splice(2) pour plus de détails.
- SPLICE_F_MORE
- N'a pas d'effet pour vmsplice() actuellement, mais
pourrait être implémenté un jour ; consultez
splice(2).
- SPLICE_F_GIFT
- Les pages utilisateur sont offertes au noyau. L'application
ne pourra plus jamais modifier cette mémoire, sans quoi le cache de
pages et les données stockées sur disque pourraient
être différentes. Offrir des pages au noyau signifie qu'un
futur appel à SPLICE_F_MOVE de splice(2) peut
effectivement déplacer les pages ; si ce paramètre
n'est pas spécifié, un futur appel à
SPLICE_F_MOVE de splice(2) doit copier les pages. Les
données doivent par ailleurs être correctement
alignées sur des frontières de pages, que ce soit en
mémoire ou en taille.
S'il réussit,
vmsplice() renvoie le nombre d'octets
transférés dans le tube. En cas d'erreur,
vmsplice()
renvoie
-1 et
errno est défini pour préciser
l'erreur.
- EAGAIN
-
SPLICE_F_NONBLOCK était indiqué dans
flags, et l'opération pourrait bloquer.
- EBADF
-
fd n'est pas valable ou ne correspond pas à
un tube.
- EINVAL
-
nr_segs est supérieur à
IOV_MAX, ou bien la mémoire n'est pas alignée si
SPLICE_F_GIFT est spécifié.
- ENOMEM
- Plus assez de mémoire.
L'appel système
vmsplice() 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.
vmsplice() suit les conventions des autres fonctions vectorielles de type
read/write quant aux limites sur le nombre de segments qui peuvent être
passés. Cette limite est
IOV_MAX définie dans
<limits.h>. Actuellement, cette limite est 1024.
vmsplice() prend en charge réellement le raccord véritable
uniquement à partir de la mémoire utilisateur vers un tube. En
direction inverse, il copie vraiment seulement les données dans
l'espace utilisateur. Mais cela fait une interface agréable et
symétrique qui permet de construire sur
vmsplice() avec de
l'espace pour une amélioration ultérieure de performance.
splice(2),
tee(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
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Jean-Pierre Giraud <
[email protected]>
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 à
[email protected]