VMSPLICE(2)

NOM
vmsplice - Copier des pages utilisateur dans un tube

SYNOPSIS
#define _GNU_SOURCE
#include <fcntl.h>
#include <sys/uio.h>
long vmsplice(int fd, const struct iovec *iov,
              unsigned long nr_segs, unsigned int flags);

DESCRIPTION
L'appel système vmsplice() projette les nr_segs segments de mémoire utilisateur décrits par iov dans un tube. Le descripteur de fichier fd doit faire référence à un tube. Le pointeur iov pointe vers un tableau de structures iovec telles qu'elles sont définies dans <sys/uio.h> :
struct iovec {
    void  *iov_base;            /* Adresse de début */
    size_t iov_len;             /* Nombre d'octets */
};
L'argument flags est un masque de bits constitué par un OU binaire entre zéro ou plusieurs des valeurs suivantes :

SPLICE_F_MOVE
    Inutilisé pour vmsplice() ; voir splice(2).

SPLICE_F_NONBLOCK
    Ne pas bloquer sur les entrées-sorties ; voir splice(2) pour plus de détails.

SPLICE_F_MORE
    Actuellement sans effet pour vmsplice(), mais pourrait être implémenté un jour ; voir splice(2).

SPLICE_F_GIFT
    Les pages utilisateur sont offertes au noyau. L'application ne pourra plus les modifier sinon le cache de pages pourrait être différent des données du disque. Offrir ces pages au noyau signifie qu'un appel ultérieur à splice(2) SPLICE_F_MOVE peut effectivement déplacer les pages ; si cet attribut n'est pas spécifié, un appel ultérieur à splice(2) SPLICE_F_MOVE doit copier les pages. De plus, les données doivent ê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 vers le tube. En cas d'erreur, vmsplice() renvoie -1 et errno contient le code d'erreur.

ERREURS

EBADF
    fd n'est pas valide ou ne fait pas référence à un tube.

EINVAL
    nr_segs est nul ou supérieur à IOV_MAX ; ou bien la mémoire n'est pas alignée si SPLICE_F_GIFT est positionné.

ENOMEM
    Pas assez de mémoire.

VERSIONS
L'appel système vmsplice() est apparu pour la première fois dans Linux 2.6.17.

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

NOTES
vmsplice() suit les conventions des autres fonctions vectorisées de type lecture/écriture concernant les limitations sur le nombre de segments pouvant être passés. Cette limite est IOV_MAX telle que définie dans <limits.h>. Au moment où cette page a été rédigée, cette limite était 1024.

VOIR AUSSI
splice(2), tee(2), feature_test_macros(7)

TRADUCTION

Ce document est une traduction réalisée par Alain Portal <aportal AT univ-montp2 DOT fr> le 24 octobre 2007 et révisée le 29 décembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 vmsplice ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.