Provided by:
manpages-fr_3.32d0.2p4-1_all 
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)