Tubes nommés
Progression
#Les tubes nommés
Les tubes sont souvent la première porte vers la communication inter-processus. Un tube anonyme naît d'un appel pipe
et vit tant que les deux extrémités demeurent ouvertes. Un tube nommé (FIFO) enfonce le clou : mkfifo
crée une entrée spéciale dans le système de fichiers, accessible à tout processus respectant les permissions.
#1. Création et ouverture
mkfifo chemin mode
produit un fichier FIFO. Lorsqu'un processus l'ouvre en lecture, il est bloqué tant qu'aucun écrivain n'a ouvert l'autre extrémité, et inversement. Cette synchronisation implicite évite de perdre les premiers octets. Contrairement à un pipe anonyme, une FIFO peut être ouverte par plusieurs écrivains ou lecteurs indépendants, pour peu que chacun respecte la convention (par exemple écrire des messages terminés par un saut de ligne).
#2. Atomacité et limitations
Le noyau garantit que toute écriture inférieure ou égale à PIPE_BUF
octets reste atomique. Au-delà, les messages peuvent se mêler. Par conséquent, un protocole sérieux doit segmenter ses données ou ajouter une couche de sérialisation (longueur + contenu). Une FIFO ne conserve pas de données lorsque plus personne ne la tient ouverte : si un lecteur arrive à retardement, il ne verra que les messages futurs.
#3. Exploration pratique
1mkfifo flux2producer() { for i in $(seq 1 5); do echo "tick $i"; sleep 1; done }3consumer() { while read line; do echo "[read] $line"; done }4producer > flux &5consumer < flux
Ce script illustre la simplicité du mécanisme : aucune socket, aucun serveur, juste un fichier spécial. Les permissions de la FIFO contrôlent l'accès ; les outils système (ls -l
, stat
) révèlent son type (lettre p) et son compteur de lecteurs/écrivains.
#Atelier
Développez un pipeline de surveillance où un programme C collecte des métriques (charge CPU, température) et les écrit dans une FIFO, tandis qu'un second programme lit la FIFO et déclenche des alertes. Expérimentez avec deux producteurs simultanés pour comprendre l'importance de l'atomicité. Terminez en supprimant la FIFO pour valider que le programme sait la recréer au démarrage suivant.