FIFO

Section: Manuel du programmeur Linux (4)
Updated: 9 Janvier 2000
Index Retour au Menu Principal

 

NOM

fifo - Fichier spécial file FIFO, tube nommé.  

DESCRIPTION

Un fichier spécial de file FIFO (First In, First Out : premier entré / premier sorti) est semblable à un tube (pipeline) excepté qu'il est accédé comme un fichier appartenant au système de fichier.

[NdT : un pipeline appartient également pour moi au système de fichier comme étant la concaténation de la sortie et de l'entrée standardes de deux processus, disponibles dans /proc/*/fd et /dev/{std*,fd/*}. La distinction est plutôt dans le fait qu'au lieu d'être créé par un processus maître de groupe (typiquement un shell) qui créé implicitement le pipeline (dup2() / fork() / close() / {read,write}()), les processus ouvrent explicitement un fichier au lieu de communiquer via leur entrée/sortie standardes].

Il peut être ouvert par plusieurs processus, tant en lecture qu'en écriture. [Ndt: en cas de multiplexage, il faut faire attention à la taille limitée (2ko) du tampon]. Quand des processus échangent des données via un FIFO, les données ne sont pas physiquement écrites dans le système de fichiers mais transitent directement par le noyau. Aussi, une FIFO n'a t-elle pas de véritable contenu dans le système de fichier, ce dernier ne servant que point de référence pour que les processus accèdent au tube en utilisant un nom du système de fichier.

Le noyau gère un seul pipeline par fichier spécial FIFO ouvert, quel que soit le nombre de processus l'ayant ouvert. La FIFO doit être ouverte en lecture et en écriture avant que des données ne puissent être échangées. Normalement, l'ouverture de la FIFO bloque le processus jusqu'à ce qu'un autre processus ouvre l'autre extrémité du tube.

Un processus peut ouvrir une FIFO en mode non bloquant. Dans ce cas l'ouverture en lecture seule réussira même si personne n'a encore ouvert la FIFO en écriture. L'ouverture en écriture seule échouera avec l'erreur ENXIO (pas de tel périphérique ou adresse) si l'autre extrémité n'a pas encore été ouverte.

Sous Linux, l'ouverture d'une file FIFO en lecture et écriture réussira aussi bien en mode bloquant que non bloquant. POSIX ne définit pas de comportement pour ce cas de figure. Cela peut être utilisée pour ouvrir une FIFO en écriture sans qu'il n'y ait de lecteurs disponibles. Un processus utilisant les deux extrémités de la connection afin de communiquer avec lui-même doit faire très attention à ne pas provoquer d'interblocage (deadlock).

 

NOTES

Quand un processus essaye d'écrire dans une FIFO qui n'a pas été ouverte en lecture de l'autre côté reçoit un signal SIGPIPE.

Un fichier spécial de file FIFO peut être créé à l'aide de la fonction mkfifo(3), et est affiché de manière particulière avec un ls -l.  

VOIR AUSSI

mkfifo(3), mkfifo(1), pipe(2), socketpair(2), open(2), signal(2), sigaction(2)

 

TRADUCTION

Christophe Blaess <ccb@club-internet.fr>, 2000
Thierry Vignaud <tvignaud@mandrakesoft.com>, 1999



 

Index

NOM
DESCRIPTION
NOTES
VOIR AUSSI
TRADUCTION


Time: 09:25:56 GMT, December 26, 2004