Provided by: manpages-fr_3.65d1p1-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
       fichier, 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 ; consultez 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.  Consultez
       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 d'octets : il n'y a  pas  de  notion  de  limite
       entre messages.

       Si  tous  les  descripteurs  de  fichier 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  fichier  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 fichier 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 définit 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 (consultez 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 3.65 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

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

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

       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> ».

Linux                                            8 décembre 2005                                         PIPE(7)