Provided by: manpages-fr_3.32d0.2p4-1_all bug

NOM

       pipe - Panorama des tubes et des FIFO

DESCRIPTION

       Les  tubes  et  les  FIFO  (ou  tubes  nommes)  fournissent un canal de
       communication interprocessus unidirectionnel. Un tube a une  entr'ee  et
       une  sortie. Les donnees ecrites a l'entree du tube peuvent etre lues a
       sa sortie.

       Un tube est cree avec l'appel systeme pipe(2), qui cree un nouveau tube
       et  renvoie deux descripteurs de fichier, l'un correspondant a l'entree
       du tube, et l'autre a la sortie. Les tubes peuvent etre  utilises  pour
       creer  un  canal  de communication entre des processus lies ; consultez
       pipe(2) pour un exemple.

       Un FIFO (abreviation de First In First Out) a un nom sur le systeme  de
       fichiers  (cree  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'entree
       est ouverte avec l'option O_WRONLY.  Consultez  fifo(7)  pour  plus  de
       details. Note : meme si les FIFO ont un nom sur le systeme de fichiers,
       les entrees/sorties sur un FIFO n'impliquent pas  d'operations  sur  le
       peripherique sous-jacent (s'il y en a un).

   E/S sur les tubes et les FIFO
       La seule difference entre les tubes et les FIFO est la maniere dont ils
       sont crees et ouverts. Une fois ces taches accomplies, les E/S sur  les
       tubes et les FIFO ont strictement les memes semantiques.

       Si  un  processus  essaie  de  lire dans un tube vide, read(2) bloquera
       jusqu'a ce que des donnees soient disponibles. Si un  processus  essaie
       d'ecrire  dans un tube plein (voir ci-dessous), write(2) bloque jusqu'a
       ce que suffisamment de donnees aient ete lues dans  le  tube  avant  de
       permettre  la  reussite  de  l'ecriture.  Des  E/S  non bloquantes sont
       possibles en utilisant l'operation F_SETFL  de  fcntl(2)  pour  activer
       l'attribut O_NONBLOCK.

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

       Si tous les descripteurs de fichier correspondant a l'entree d'un  tube
       sont  fermes,  une  tentative  de  lecture  sur  le  tube  renverra une
       condition  de  fin  de  fichier  (read(2)  renverra  0).  Si  tous  les
       descripteurs  de  fichier  correspondant  a  la  sortie  d'un tube sont
       fermes, une tentative d'ecriture provoquera l'envoi du  signal  SIGPIPE
       au  processus  appelant.  Si  le  processus  appelant ignore ce signal,
       write(2) echoue avec l'erreur EPIPE. Une application utilisant  pipe(2)
       et  fork(2)  doit  utiliser  des  appels  a close(2) afin de fermer les
       descripteurs de  fichier  superflus ;  ceci  permet  d'assurer  que  la
       condition de fin de ficher et SIGPIPE/EPIPE sont renvoyes correctement.

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

   Capacit'e d'un tube
       Un  tube  a  une  capacite  limitee.  Si le tube est plein, un write(2)
       bloquera ou echouera, selon que l'attribut O_NONBLOCK est active ou non
       (voir  ci-dessous). Differentes implementations ont differentes limites
       de capacite des tubes. Les applications ne doivent pas  dependre  d'une
       capacite  particuliere,  mais etre concues pour qu'un processus lecteur
       lise les donnees des qu'elles sont disponibles,  pour  qu'un  processus
       ecrivain ne soit pas bloque.

       Dans  les versions de Linux anterieures a 2.6.11, la capacite d'un tube
       etait la taille d'une page systeme (p.ex. 4096 octets sur i386). Depuis
       Linux 2.6.11, la capacite d'un tube est de 65536 octets.

   PIPE_BUF
       POSIX.1-2001  indique  que  les  ecritures de moins que PIPE_BUF octets
       doivent etre atomiques : les donnees sont ecrites dans le tube de facon
       contigue.  Les  ecritures  de  plus  que  PIPE_BUF  peuvent ne pas etre
       atomiques : le noyau peut  entrelacer  les  donnees  avec  des  donnees
       ecrites  par d'autres processus. POSIX.1-2001 demande que PIPE_BUF soit
       au moins  512 octets.  (Sous  Linux,  PIPE_BUF  vaut  4096 octets.)  La
       semantique  precise depend de l'attribut non-bloquant du descripteur de
       fichier (O_NONBLOCK), du nombre d'ecrivains dans le tube, et de  n,  le
       nombre d'octets a ecrire :

       O_NONBLOCK desactive, n <= PIPE_BUF
              Les  n octets  sont  ecrits  de maniere atomique ; write(2) peut
              bloquer  s'il  n'y  a  pas  de  place   pour   ecrire   n octets
              immediatement.

       O_NONBLOCK active, n <= PIPE_BUF
              S'il  y  a  la  place  d'ecrire  n octets dans le tube, write(2)
              reussit  immediatement,  en  ecrivant  les   n octets ;   sinon,
              write(2) echoue, et fixe errno a EAGAIN.

       O_NONBLOCK desactive, n > PIPE_BUF
              L'ecriture  est  non  atomique : les donnees fournies a write(2)
              peuvent etre entrelacees avec des ecritures d'autres processus ;
              l'ecriture bloque jusqu'a ce que n octets aient ete ecrits.

       O_NONBLOCK active, n > PIPE_BUF
              Si  le  tube  est  plein,  write(2)  echoue,  en placant errno a
              EAGAIN. Sinon, entre 1 et  n octets  peuvent  etre  ecrits  (une
              << ecriture  partielle >>  peut  se  produire ;  l'appelant doit
              verifier la valeur de  retour  de  write(2)  pour  voir  combien
              d'octets  ont reellement ete ecrits), et ces octets peuvent etre
              entrelaces avec des ecritures d'autres processus.

   Attributs d''etat de fichier ouvert
       Les seuls attributs d'etat de fichier ouvert  qui  peuvent  s'appliquer
       aux tubes et aux FIFO sont O_NONBLOCK et O_ASYNC.

       Activer  l'attribut O_ASYNC a la sortie d'un tube provoque l'envoi d'un
       signal (SIGIO par defaut) lorsque de nouvelles donnees sont disponibles
       sur  le tube (consultez fcntl(2) pour les details). Sous Linux, O_ASYNC
       n'est possible sur les tubes et les FIFO que depuis le noyau 2.6.

   Notes sur la portabilit'e
       Sur  certains  systemes  (mais  pas  sous  Linux),   les   tubes   sont
       bidirectionnels :  des  donnees  peuvent  etre transmises dans les deux
       directions entre les bouts du tube. Selon POSIX.1-2001, les tubes  sont
       uniquement  decrits  comme unidirectionnels. Les applications portables
       doivent eviter de s'appuyer sur  une  semantique  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  3.32  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> >>.

Linux                           8 decembre 2005                        PIPE(7)