.\" -*- coding: UTF-8 -*-
.\" Copyright, the authors of the Linux man-pages project
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH pipe 7 "17 mai 2025" "Pages du manuel de Linux 6.15"
.SH NOM
pipe – Exposé général sur les tubes et les FIFO
.SH DESCRIPTION
Les tubes et les FIFO (ou tubes nommés) fournissent un canal de
communication interprocessus unidirectionnel. Un tube a une \fIentrée\fP et une
\fIsortie\fP. Les données écrites à l'entrée du tube peuvent être lues à sa
sortie.
.P
Un tube est créé avec l'appel système \fBpipe\fP(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 associés\ ; consultez \fBpipe\fP(2) pour
un exemple.
.P
Une file d’attente FIFO (abréviation de « First In First Out » ou premier
entré, premier sorti) a un nom sur le système de fichiers (créé avec
\fBmkfifo\fP(3)) et est ouverte avec \fBopen\fP(2). Tout processus peut ouvrir une
FIFO si les permissions du fichier l'autorisent. La sortie est ouverte avec
l'option \fBO_RDONLY\fP\ ; l'entrée est ouverte avec l'option
\fBO_WRONLY\fP. Consultez \fBfifo\fP(7) pour plus de détails. \fINote\fP\ : même si
les FIFO ont un nom sur le système de fichiers, les entrées/sorties sur une
FIFO n'impliquent pas d'opérations sur le périphérique sous\(hyjacent (s'il
y en a un).
.SS "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.
.P
Si un processus essaie de lire dans un tube vide, \fBread\fP(2) bloquera
jusqu'à ce que des données soient disponibles. Si un processus essaie
d'écrire dans un tube plein (voir ci\(hydessous), \fBwrite\fP(2) bloque jusqu'à
ce que suffisamment de données aient été lues dans le tube pour permettre la
réussite de l'écriture.
.P
Des E/S non bloquantes sont possibles en utilisant l'opération \fBF_SETFL\fP de
\fBfcntl\fP(2) pour activer l'attribut \fBO_NONBLOCK\fP d’état de fichier ouvert
ou en ouvrant une \fBfifo\fP(7) avec \fBO_NONBLOCK\fP. Si le tube d'un processus
est ouvert en écriture, les lectures échoue avec une erreur \fBEAGAIN\fP ;
autrement, sans processus écrivant potentiel, les lectures réussissent et ne
renvoient rien.
.P
Le canal de communication fourni par un tube est un \fIflux d'octets\fP\ : il
n'y a pas de notion de limite de messages.
.P
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 (\fBread\fP(2) renverra \fB0\fP). Si tous les descripteurs de fichier
correspondant à la sortie d'un tube sont fermés, une tentative d'écriture
provoquera l'envoi du signal \fBSIGPIPE\fP au processus appelant. Si le
processus appelant ignore ce signal, \fBwrite\fP(2) échoue avec l'erreur
\fBEPIPE\fP. Une application utilisant \fBpipe\fP(2) et \fBfork\fP(2) doit utiliser
des appels à \fBclose\fP(2) afin de fermer les descripteurs de fichier
superflus\ ; cela permet d'assurer que la condition de fin de ficher et
\fBSIGPIPE\fP/\fBEPIPE\fP soient renvoyés correctement.
.P
Il n'est pas possible d'invoquer \fBlseek\fP(2) sur un tube.
.SS "Capacité d'un tube"
Un tube a une capacité limitée. Si le tube est plein, un \fBwrite\fP(2)
bloquera ou échouera, selon que l'attribut \fBO_NONBLOCK\fP est activé ou non
(voir ci\(hydessous). 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 de manière à ce qu'un processus
écrivant ne soit pas bloqué.
.P
Before Linux 2.6.11, the capacity of a pipe was the same as the system page
size (e.g., 4096 bytes on i386). Since Linux 2.6.11, the pipe capacity is
16 pages (i.e., 65,536 bytes in a system with a page size of 4096 bytes).
Since Linux 2.6.35, the default pipe capacity is 16 pages, but the capacity
can be queried and set using the \fBfcntl\fP(2) \fBF_GETPIPE_SZ\fP and
\fBF_SETPIPE_SZ\fP operations. See \fBfcntl\fP(2) for more information. Since
Linux 4.5, the default pipe capacity is lower than 16 pages when the
\fIpipe\-user\-pages\-soft\fP limit is exceeded.
.P
L’opération \fBioctl\fP(2) suivante, qui peut être appliquée à un descripteur
de fichier faisant référence à n’importe quelle extrémité du tube, place un
certain nombre d’octets non lus dans le tube dans le tampon \fIint\fP pointé
par le dernier argument de l’appel :
.P
.in +4n
.EX
ioctl(fd, FIONREAD, &nbytes);
.EE
.in
.P
.\"
L’opération \fBFIONREAD\fP n’est précisée dans aucune norme, mais est fournie
dans beaucoup d’implémentations.
.SS "Fichiers /proc"
Dans Linux, les fichiers suivants contrôlent la quantité de mémoire pouvant
être utilisée pour les tubes :
.TP
\fI/proc/sys/fs/pipe\-max\-pages\fP (uniquement pour Linux 2.6.34)
.\" commit b492e95be0ae672922f4734acf3f5d35c30be948
Une limite supérieure, en nombre de pages, sur la quantité qu’un utilisateur
non privilégié (n’ayant pas la capacité \fBCAP_SYS_RESOURCE\fP) peut être
définie pour un tube.
.IP
La valeur par défaut pour cette limite est de 16 fois la quantité par défaut
pour le tube (voir ci\-dessus). La limite basse est de deux pages.
.IP
Cette interface a été supprimée dans Linux 2.6.35, en faveur de
\fI/proc/sys/fs/pipe\-max\-size\fP.
.TP
\fI/proc/sys/fs/pipe\-max\-size\fP (depuis Linux 2.6.35)
.\" commit ff9da691c0498ff81fdd014e7a0731dab2337dac
.\" This limit is not checked on pipe creation, where the capacity is
.\" always PIPE_DEF_BUFS, regardless of pipe-max-size
La taille maximale (en octet) de tubes particuliers pouvant être définie par
les utilisateurs n’ayant pas la capacité \fBCAP_SYS_RESOURCE\fP. La valeur
assignée dans ce fichier peut être arrondie à la valeur supérieure pour
refléter la valeur réellement employée pour une mise en œuvre pratique. Pour
déterminer cette valeur arrondie, affichez le contenu de ce fichier après
lui avoir assigné une valeur.
.IP
La valeur par défaut pour ce fichier est 1 048 576 (1\ Mibit). La valeur
minimale qui peut être assignée à cette page est la taille de page du
système. Un essai d’une limite inférieure à cette taille de page provoque
l’échec de \fBwrite\fP(2) avec l’erreur \fBEINVAL\fP.
.IP
.\" commit 086e774a57fba4695f14383c0818994c0b31da7c
Depuis Linux 4.9, la valeur dans ce fichier agit comme un plafond pour la
capacité par défaut pour un nouveau tube ou une FIFO nouvellement ouverte.
.TP
\fI/proc/sys/fs/pipe\-user\-pages\-hard\fP (depuis Linux 4.5)
.\" commit 759c01142a5d0f364a462346168a56de28a80f52
La limite dure de la taille totale (en nombre de pages) de tous les tubes
créés ou définis par un utilisateur particulier non privilégié (c’est\-à\-dire
n’ayant ni la capacité \fBCAP_SYS_RESOURCE\fP ni la capacité
\fBCAP_SYS_ADMIN\fP). Aussi longtemps que le nombre total de pages allouées
pour les tampons de tube pour cet utilisateur est à cette limite, les essais
pour créer de nouveaux tubes n’aboutiront pas et les essais pour augmenter
la capacité de tube n’aboutiront pas.
.IP
.\" The default was chosen to avoid breaking existing applications that
.\" make intensive use of pipes (e.g., for splicing).
Quand la valeur de cette limite est zéro (comportement par défaut ), aucune
limite dure n’est appliquée.
.TP
\fI/proc/sys/fs/pipe\-user\-pages\-soft\fP (depuis Linux 4.5)
.\" commit 759c01142a5d0f364a462346168a56de28a80f52
The soft limit on the total size (in pages) of all pipes created or set by a
single unprivileged user (i.e., one with neither the \fBCAP_SYS_RESOURCE\fP nor
the \fBCAP_SYS_ADMIN\fP capability). So long as the total number of pages
allocated to pipe buffers for this user is at this limit, individual pipes
created by a user will be limited to two pages (one page before Linux 5.14),
and attempts to increase a pipe's capacity will be denied.
.IP
Quand la valeur de cette limite est zéro, aucune limite douce n’est
appliquée. La valeur par défaut dans ce fichier est 16 384 qui permet de
créer jusqu’à 1 024 tubes avec la capacité par défaut.
.P
.\"
Avant Linux 4.9, quelques bogues affectaient la gestion des limites
\fIpipe\-user\-pages\-soft\fP et \fIpipe\-user\-pages\-hard\fP. Consultez la section
BOGUES.
.SS PIPE_BUF
POSIX.1\-2001 indique que les écritures de moins de \fBPIPE_BUF\fP octets
doivent être atomiques\ : les données produites sont écrites dans le tube
de façon contiguë. Les écritures de plus de \fBPIPE_BUF\fP octets 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 \fBPIPE_BUF\fP soit au
moins de 512 octets ; sous Linux, \fBPIPE_BUF\fP vaut 4 096 octets. La
sémantique précise dépend de l'attribut non bloquant du descripteur de
fichier (\fBO_NONBLOCK\fP), du nombre de processus écrivant dans le tube et de
\fIn\fP, le nombre d'octets à écrire\ :
.TP
\fBO_NONBLOCK\fP disabled, \f[I]n\fR <= \fBPIPE_BUF\fP
Les \fIn\fP octets sont écrits de manière atomique\ ; \fBwrite\fP(2) peut bloquer
s'il n'y a pas de place pour écrire \fIn\fP octets immédiatement.
.TP
\fBO_NONBLOCK\fP enabled, \f[I]n\fR <= \fBPIPE_BUF\fP
S'il y a la place d'écrire \fIn\fP octets dans le tube, \fBwrite\fP(2) réussit
immédiatement, en écrivant les \fIn\fP octets\ ; sinon, \fBwrite\fP(2) échoue et
définit \fIerrno\fP à \fBEAGAIN\fP.
.TP
\fBO_NONBLOCK\fP disabled, \f[I]n\fR > \fBPIPE_BUF\fP
L'écriture est non atomique\ : les données fournies à \fBwrite\fP(2) peuvent
être entrelacées avec des écritures d'autres processus\ ; l'écriture bloque
jusqu'à ce que \fIn\fP octets aient été écrits.
.TP
\fBO_NONBLOCK\fP enabled, \f[I]n\fR > \fBPIPE_BUF\fP
Si le tube est plein, \fBwrite\fP(2) échoue, en plaçant \fIerrno\fP à
\fBEAGAIN\fP. Sinon, entre 1 et \fIn\fP octets peuvent être écrits (une «\ écriture partielle\ » peut se produire\ ; l'appelant doit vérifier la valeur
de retour de \fBwrite\fP(2) pour voir combien d'octets ont réellement été
écrits), et ces octets peuvent être entrelacés avec des écritures d'autres
processus.
.SS "Attributs d'état de fichier ouvert"
Les seuls attributs d'état de fichier ouvert qui peuvent s'appliquer aux
tubes et aux FIFO sont \fBO_NONBLOCK\fP et \fBO_ASYNC\fP.
.P
Activer l'attribut \fBO_ASYNC\fP à la sortie d'un tube provoque l'envoi d'un
signal (\fBSIGIO\fP par défaut) lorsque de nouvelles données sont disponibles
dans le tube. La cible de réception du signal doit être définie en utilisant
la commande \fBF_SETOWN\fP de \fBfcntl\fP(2). Sous Linux, \fBO_ASYNC\fP n'est
possible sur les tubes et les FIFO que depuis Linux 2.6.
.SS "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
extrémités 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.
.SS BOGUES
.\" These bugs where remedied by a series of patches, in particular,
.\" commit b0b91d18e2e97b741b294af9333824ecc3fadfd8 and
.\" commit a005ca0e6813e1d796a7422a7e31d8b8d6555df1
Avant Linux 4.9, quelques bogues affectaient la gestion des limites
\fIpipe\-user\-pages\-soft\fP et \fIpipe\-user\-pages\-hard\fP lors de l’utilisation de
l’opération \fBF_SETPIPE_SZ\fP de \fBfcntl\fP(2) pour modifier la capacité d’un
tube :
.IP (a) 5
Lors de l’augmentation de la capacité du tube, les vérifications sur les
limites douce et dure sont faites sur la consommation existante et excluent
la mémoire nécessaire pour la capacité augmentée du tube. La nouvelle
augmentation de capacité du tube pourrait pousser la mémoire totale utilisée
par l’utilisateur pour les tubes au\-dessus (possiblement très au delà) de la
limite. Cela pourrait aussi déclencher le problème exposé ci\-après.
.IP
Depuis Linux 4.9, la vérification de limite inclut la mémoire nécessaire
pour la nouvelle capacité de tube.
.IP (b)
Les vérifications de limite sont réalisées même si la nouvelle capacité du
tube est inférieure à la capacité du tube existant. Cela pourrait conduire à
des problèmes si un utilisateur définit une capacité importante de tube et
que les limites sont abaissées, avec comme résultat que l’utilisateur ne
pourrait plus abaisser la capacité du tube.
.IP
Depuis Linux 4.9, les vérifications des limites sont réalisées uniquement
lors de l’augmentation de capacité de tube. Un utilisateur non privilégié
peut toujours diminuer la capacité de tube.
.IP (c)
La prise en compte et la vérification sur les limites sont faites comme
suit :
.RS
.IP (1) 5
.PD 0
Test pour savoir si l’utilisateur a dépassé la limite.
.IP (2)
Allocation du tampon pour le nouveau tube.
.IP (3)
Comparaison de la nouvelle allocation avec les limites.
.PD
.RE
.IP
Cela est risqué. Plusieurs processus peuvent passer le point (1)
simultanément et puis allouer des tampons de tube qui sont pris en compte
lors de l’étape (3), avec comme résultat que l’allocation du tampon de tube
de l’utilisateur peut dépasser la limite.
.IP
Depuis Linux 4.9, l’étape de prise en compte est réalisée avant l’allocation
et l’opération échoue si la limite est dépassée.
.P
Avant Linux 4.9, des bogues similaires aux points (a) et (c) pourraient se
produire quand le noyau alloue de la mémoire pour le nouveau tampon de tube,
c’est\-à\-dire lors de l’appel \fBpipe\fP(2) et lors de l’ouverture d’une
nouvelle FIFO précédemment non ouverte.
.SH "VOIR AUSSI"
\fBmkfifo\fP(1), \fBdup\fP(2), \fBfcntl\fP(2), \fBopen\fP(2), \fBpipe\fP(2), \fBpoll\fP(2),
\fBselect\fP(2), \fBsocketpair\fP(2), \fBsplice\fP(2), \fBstat\fP(2), \fBtee\fP(2),
\fBvmsplice\fP(2), \fBmkfifo\fP(3), \fBepoll\fP(7), \fBfifo\fP(7)
.PP
.SH TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess ,
Stéphan Rafin ,
Thierry Vignaud ,
François Micaux,
Alain Portal ,
Jean-Philippe Guérard ,
Jean-Luc Coulon (f5ibh) ,
Julien Cristau ,
Thomas Huriaux ,
Nicolas François ,
Florentin Duneau ,
Simon Paillard ,
Denis Barbier ,
David Prévot ,
Cédric Boutillier ,
Frédéric Hantrais
et
Jean-Paul Guillonneau
.
.PP
Cette traduction est une documentation libre ; veuillez vous reporter à la
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License version 3
.UE
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
.PP
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
.MT debian-l10n-french@lists.debian.org
.ME .