Provided by: manpages-fr_2.80.1-1_all bug

NOM

       pipe - Panorama des tubes et des FIFO

DESCRIPTION

       Les  tubes  et  les  FIFO  (ou  tubes  nommés)  fournissent un canal de
       communication interprocessus unidirectionnel. Un tube a une  entrée  et
       une  sortie. Les donnĂ©es Ă©crites Ă  l’entrĂ©e du tube peuvent ĂȘtre lues Ă 
       sa sortie.

       Un tube est crĂ©Ă© avec l’appel systĂšme pipe(2), qui crĂ©e un nouveau tube
       et renvoie deux descripteurs de fichiers, l’un correspondant Ă  l’entrĂ©e
       du tube, et l’autre Ă  la sortie. Les tubes peuvent ĂȘtre  utilisĂ©s  pour
       créer un canal de communication entre des processus liés ; voir pipe(2)
       pour un exemple.

       Un FIFO (abréviation de First In First Out) a un nom sur le systÚme  de
       fichiers  (créé  avec  mkfifo(3)),  et  est  ouvert  avec open(2). Tout
       processus  peut  ouvrir  un  FIFO,  si  les  permissions   du   fichier
       l’autorisent.  La  sortie est ouverte avec l’option O_RDONLY ; l’entrĂ©e
       est ouverte avec l’option O_WRONLY. Voir fifo(7) pour plus de  dĂ©tails.
       Note :  mĂȘme  si  les  FIFO  ont un nom sur le systĂšme de fichiers, les
       entrĂ©es/sorties sur  un  FIFO  n’impliquent  pas  d’opĂ©rations  sur  le
       pĂ©riphĂ©rique sous‐jacent (s’il y en a un).

   E/S sur les tubes et les FIFO
       La seule différence entre les tubes et les FIFO est la maniÚre dont ils
       sont créés et ouverts. Une fois ces tùches accomplies, les E/S sur  les
       tubes et les FIFO ont strictement les mĂȘmes sĂ©mantiques.

       Si  un  processus  essaie  de  lire dans un tube vide, read(2) bloquera
       jusqu’à ce que des donnĂ©es soient disponibles. Si un  processus  essaie
       d’écrire  dans un tube plein (voir ci‐dessous), write(2) bloque jusqu’à
       ce que suffisamment de données aient été lues dans  le  tube  avant  de
       permettre  la  rĂ©ussite  de  l’écriture.  Des  E/S  non bloquantes sont
       possibles en utilisant l’opĂ©ration F_SETFL  de  fcntl(2)  pour  activer
       l’attribut O_NONBLOCK.

       Le  canal de communication fourni par un tube est un flot €™octets : il
       n’y a pas de notion de limite entre messages.

       Si tous les descripteurs de fichiers correspondant Ă  l’entrĂ©e d’un tube
       sont  fermés,  une  tentative  de  lecture  sur  le  tube  renverra une
       condition  de  fin  de  fichier  (read(2)  renverra  0).  Si  tous  les
       descripteurs  de  fichiers  correspondant  à  la  sortie d’un tube sont
       fermĂ©s, une tentative d’écriture provoquera l’envoi du  signal  SIGPIPE
       au  processus  appelant.  Si  le  processus  appelant ignore ce signal,
       write(2) Ă©choue avec l’erreur EPIPE. Une application utilisant  pipe(2)
       et  fork(2)  doit  utiliser  des  appels  Ă  close(2) afin de fermer les
       descripteurs de fichiers  superflus ;  ceci  permet  d’assurer  que  la
       condition de fin de ficher et SIGPIPE/EPIPE sont renvoyés correctement.

       Il n’est pas possible d’invoquer lseek(2) sur un tube.

   CapacitĂ© dâ€â€™un tube
       Un tube a une capacité limitée. Si  le  tube  est  plein,  un  write(2)
       bloquera ou Ă©chouera, selon que l’attribut O_NONBLOCK est activĂ© ou non
       (voir ci‐dessous). DiffĂ©rentes implĂ©mentations ont diffĂ©rentes  limites
       de  capacitĂ©  des tubes. Les applications ne doivent pas dĂ©pendre d’une
       capacitĂ© particuliĂšre, mais ĂȘtre conçues pour qu’un  processus  lecteur
       lise  les  donnĂ©es  dĂšs qu’elles sont disponibles, pour qu’un processus
       écrivain ne soit pas bloqué.

       Dans les versions de Linux antĂ©rieures Ă  2.6.11, la capacitĂ© d’un  tube
       Ă©tait la taille d’une page systĂšme (p.ex. 4096 octets sur i386). Depuis
       Linux 2.6.11, la capacitĂ© d’un tube est de 65536 octets.

   PIPE_BUF
       POSIX.1-2001 indique que les Ă©critures de  moins  que  PIPE_BUF  octets
       doivent ĂȘtre atomiques : les donnĂ©es sont Ă©crites dans le tube de façon
       contiguĂ«. Les Ă©critures de  plus  que  PIPE_BUF  peuvent  ne  pas  ĂȘtre
       atomiques :  le  noyau  peut  entrelacer  les  données avec des données
       Ă©crites par d’autres processus. POSIX.1-2001 demande que PIPE_BUF  soit
       au  moins  512  octets.  (Sous  Linux,  PIPE_BUF  vaut 4096 octets.) La
       sĂ©mantique prĂ©cise dĂ©pend de l’attribut non-bloquant du descripteur  de
       fichier  (O_NONBLOCK),  du nombre d’écrivains dans le tube, et de n, le
       nombre d’octets Ă  Ă©crire :

       O_NONBLOCK désactivé, n <= PIPE_BUF
              Les n octets sont Ă©crits de  maniĂšre  atomique ;  write(2)  peut
              bloquer   s’il   n’y  a  pas  de  place  pour  Ă©crire  n  octets
              immédiatement.

       O_NONBLOCK activé, n <= PIPE_BUF
              S’il y a la place d’écrire  n  octets  dans  le  tube,  write(2)
              réussit   immédiatement,  en  écrivant  les  n  octets ;  sinon,
              write(2) Ă©choue, et fixe errno Ă  EAGAIN.

       O_NONBLOCK désactivé, n > PIPE_BUF
              L’écriture est non atomique : les donnĂ©es  fournies  Ă   write(2)
              peuvent ĂȘtre entrelacĂ©es avec des Ă©critures d’autres processus ;
              l’écriture bloque jusqu’à ce que n octets aient Ă©tĂ© Ă©crits.

       O_NONBLOCK activé, n > PIPE_BUF
              Si le tube est  plein,  write(2)  échoue,  en  plaçant  errno  à
              EAGAIN.  Sinon,  entre  1  et  n octets peuvent ĂȘtre Ă©crits (une
              « Ă©criture  partielle »  peut  se  produire ;  l’appelant   doit
              vérifier  la  valeur  de  retour  de  write(2) pour voir combien
              d’octets ont rĂ©ellement Ă©tĂ© Ă©crits), et ces octets peuvent  ĂȘtre
              entrelacĂ©s avec des Ă©critures d’autres processus.

   Attributs dâ€â€™Ă©tat de fichier ouvert
       Les  seuls  attributs  d’état de fichier ouvert qui peuvent s’appliquer
       aux tubes et aux FIFO sont O_NONBLOCK et O_ASYNC.

       Activer l’attribut O_ASYNC à la sortie d’un tube provoque l’envoi  d’un
       signal (SIGIO par défaut) lorsque de nouvelles données sont disponibles
       sur le tube (voir fcntl(2) pour les dĂ©tails). Sous Linux, O_ASYNC n’est
       possible sur les tubes et les FIFO que depuis le noyau 2.6.

   Notes sur la portabilité
       Sur   certains   systĂšmes   (mais  pas  sous  Linux),  les  tubes  sont
       bidirectionnels : des donnĂ©es peuvent ĂȘtre  transmises  dans  les  deux
       directions  entre les bouts du tube. Selon POSIX.1-2001, les tubes sont
       uniquement décrits comme unidirectionnels. Les  applications  portables
       doivent  Ă©viter  de  s’appuyer  sur une sĂ©mantique bidirectionnelle des
       tubes.

VOIR AUSSI

       dup(2), fcntl(2), open(2), pipe(2), poll(2), select(2),  socketpair(2),
       stat(2), mkfifo(3), epoll(7), fifo(7)

COLOPHON

       Cette  page  fait  partie  de  la  publication 2.80 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       ĂȘtre       trouvĂ©es      Ă       l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette page de manuel a été traduite  et  mise  à  jour  par  Christophe
       Blaess  <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
       Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et  mise  à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gĂ©rĂ©es par Julien Cristau <jcristau@debian.org> et l’équipe
       francophone de traduction de Debian.

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

       Vous  pouvez  toujours avoir accĂšs Ă  la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».