NOM

vmsplice - Raccorder des pages utilisateur à un tube ou à partir d'un tube

BIBLIOTHÈQUE

Bibliothèque C standard ( libc, -lc)

SYNOPSIS

#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);

DESCRIPTION

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.

VALEUR RENVOYÉE

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.

ERREURS

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.

VERSIONS

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.

STANDARDS

Cet appel système est spécifique à Linux.

NOTES

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.

VOIR AUSSI

splice(2), tee(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 <[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]

Recommended readings

Pages related to vmsplice you should read also: