Provided by:
manpages-fr_3.23.1-1_all 
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 ; 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 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 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 3.23 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> ».