Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       readv, writev - Lire ou ecrire dans plusieurs tampons

SYNOPSIS

       #include <sys/uio.h>

       ssize_t readv(int fd, const struct iovec *iov, int iovcnt);

       ssize_t writev(int fd, const struct iovec *iov, int iovcnt);

DESCRIPTION

       La  fonction  readv() lit iovcnt blocs depuis le descripteur de fichier
       fd dans les multiples tampons decrits par iov.

       La fonction writev() ecrit au plus iovcnt blocs decrits par iov dans le
       fichier associe au descripteur fd.

       Le  pointeur  iov  pointe  vers un tableau de structures iovec definies
       dans <sys/uio.h> :

           struct iovec {
               void  *iov_base;    /* Adresse de debut */
               size_t iov_len;     /* Nombre d'octets a transferer */
           };

       La fonction readv() travaille comme read(2) sauf que plusieurs  tampons
       sont remplis.

       La  fonction  writev()  travaille  comme  write(2)  sauf  que plusieurs
       tampons sont ecrits.

       Les tampons sont consideres dans l'ordre du tableau. Cela signifie  que
       readv()  remplit  iov[0]  completement  avant d'en arriver a iov[1], et
       ainsi de suite. (S'il n'y a pas assez  de  donnees,  tous  les  tampons
       pointes  par  iov  ne  seront pas forcement remplis.) De meme, writev()
       ecrit tout le contenu de iov[0] avant de considerer iov[1], et ainsi de
       suite.

       Les  transferts  de  donnees  effectues  par  readv()  et writev() sont
       atomiques : les donnees ecrites par writev() sont ecrites d'un bloc qui
       n'est  pas interrompu par des ecritures venant d'autres processus (mais
       voir pipe(7) pour une exception) ; de facon  similaire,  readv()  a  la
       garantie  de lire un bloc contigu de donnees depuis le fichier, quelles
       que soient les operations de lecture effectuees par d'autres threads ou
       processus  qui  ont des descripteurs de fichier correspondant a la meme
       description de fichier ouvert (consultez open(2)).

VALEUR RENVOY'EE

       S'ils reussissent readv() renvoie le  nombre  d'octets  lus  et  writev
       renvoie  le  nombre  d'octets ecrits. En cas d'echec -1 est renvoye, et
       errno contient le code d'erreur.

ERREURS

       Les erreurs indiquees pour read(2) et write(2) sont susceptibles de  se
       produire. De plus, il peut survenir :

       EINVAL La  somme  des  valeurs  iov_len  deborde du type ssize_t, ou le
              nombre iovcnt  de  vecteur  est  nul  ou  superieur  au  maximum
              autorise.

CONFORMIT'E

       BSD 4.4 (les fonctions readv() et writev() sont apparues dans BSD 4.2),
       POSIX.1-2001. La libc5 de  Linux  utilisait  le  type  size_t  pour  le
       parametre iovcnt et int en retour de ces fonctions.

NOTES

   Notes sur Linux
       POSIX.1-2001  permet a l'implementation de limiter le nombre d'elements
       qui peuvent etre passes dans iov. Une implementation peut  annoncer  sa
       limite  en  definissant  IOV_MAX  dans  <limits.h>  ou  a l'execution a
       travers sysconf(_SC_IOV_MAX). Sous Linux, la limite annoncee ainsi  est
       1024,  qui  est  la veritable limite du noyau. Cependant, les fonctions
       d'enrobage  de  la  glibc  font  du  travail  supplementaire  si  elles
       detectent  que l'appel systeme a echoue en raison de cette limite. Pour
       readv(), la fonction d'enrobage alloue un tampon temporaire assez grand
       pour  tous  les  elements  de iov, passe ce tampon a read(2), copie les
       donnees du tampon vers les emplacements indiques par le champ  iov_base
       des  elements  de iov, puis libere le tampon. La fonction d'enrobage de
       writev() fonctionne de facon similaire avec un tampon temporaire et  un
       appel a write(2).

BOGUES

       Il  est  deconseille  de  melanger  les  appels readv() ou writev() qui
       agissent sur les descripteurs avec les  fonctions  de  la  bibliotheque
       stdio ;  les  resultats sont indefinis et probablement differents de ce
       que l'on attend.

EXEMPLE

       Le segment de code suivant donne un exemple d'utilisation de writev() :

           char *str0 = "hello ";
           char *str1 = "world\n";
           struct iovec iov[2];
           ssize_t nwritten;

           iov[0].iov_base = str0;
           iov[0].iov_len = strlen(str0);
           iov[1].iov_base = str1;
           iov[1].iov_len = strlen(str1);

           nwritten = writev(STDOUT_FILENO, iov, 2);

VOIR AUSSI

       read(2), write(2)

COLOPHON

       Cette page fait partie de  la  publication  3.27  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      etre       trouvees       a       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis  2010,  cette  traduction est maintenue a l'aide de l'outil po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone        au        sein        du       projet       perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe Blaess  <URL:http://www.blaess.fr/christophe/>  (1996-2003),
       Alain   Portal  <URL:http://manpagesfr.free.fr/>  (2003-2006).   Julien
       Cristau et l'equipe francophone de traduction de Debian (2006-2009).

       Veuillez  signaler  toute  erreur   de   traduction   en   ecrivant   a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir acces a la version anglaise de  ce  document
       en utilisant la commande << man -L C <section> <page_de_man> >>.