Un canal nommé (named pipe ou FIFO) est un fichier spécial de type p. Contrairement à un pipe anonyme (|) qui n'existe que pendant l'exécution d'un processus, le FIFO existe dans le système de fichiers et peut être utilisé par n'importe quel processus, à n'importe quel moment.
Communication entre processus qui ne sont pas liés par un pipe classique
Un processus écrit, un autre lit, à des moments différents
Débogage : rediriger la sortie d'un programme vers un fichier lisible à distance
Logs en temps réel consultables par plusieurs outils simultanément
Architecture simple sans réseau ni sockets TCP
Ouvre deux terminaux. Dans le premier :
Dans le second :
Le message apparaît dans le terminal 1. Chaque nouveau message envoyé depuis le terminal 2 sera affiché dans le terminal 1.
Les opérations de lecture et d'écriture sur un FIFO sont bloquantes par défaut. Cela signifie :
Un read bloque jusqu'à ce que des données soient disponibles
Un write bloque jusqu'à ce que les données soient lues
C'est ce comportement qui permet de synchroniser deux processus
Si tu veux qu'un processus lise et écrive sur le même FIFO, ouvre-le dans les deux directions :
Toujours supprimer les FIFO quand tu n'en as plus besoin : rm ~/mon-fifo
Utiliser des noms explicites : /tmp/serveur-cmds, /tmp/logs-app
Placer les FIFO dans /tmp ou ton dossier personnel (pas dans /dev)
Penser à la gestion du bloquage : utilise timeout si ton lecteur doit mourir proprement
En bash, utiliser while IFS= read -r ligne < "$FIFO" pour lire ligne par ligne
Ne jamais écrire dans un FIFO sans lecteur actif (le write bloquera indéfiniment)
Utiliser un fichier temporaire classique (file()) pour les gros volumes de données
Les canaux nommés sont un outil puissant pour la communication inter-processus sur Linux. Ils permettent de créer des architectures simples sans réseau ni configuration avancée. Maîtrise-les et tu disposeras d'un outil supplémentaire pour structurer tes scripts et automatisations.