Presque tout dans Linux peut être considéré comme un fichier , mais la principale différence entre un fichier standard et un canal nommé est qu’un canal nommé est une instance spéciale d’un fichier qui ne contient aucun contenu sur le système de fichiers.
Voici la citation de man fifo
:
Un fichier spécial FIFO (un canal nommé) est similaire à un canal, à la différence qu’il est accessible en tant que partie du système de fichiers. Il peut être ouvert par plusieurs processus de lecture ou d'écriture. Lorsque les processus échangent des données via la FIFO, le noyau transmet toutes les données en interne sans les écrire dans le système de fichiers. Ainsi, le fichier spécial FIFO n'a pas de contenu sur le système de fichiers; l'entrée de système de fichiers sert simplement de point de référence pour que les processus puissent accéder au canal de communication en utilisant un nom dans le système de fichiers.
Le noyau conserve exactement un objet de canal pour chaque fichier spécial FIFO ouvert par au moins un processus. La FIFO doit être ouverte aux deux extrémités (lecture et écriture) avant que les données puissent être transmises. Normalement, l’ouverture des blocs FIFO jusqu’à ce que l’autre extrémité soit également ouverte.
Donc, en réalité, un canal nommé ne fait rien jusqu’à ce qu’un processus l’ait lu et écrit. Il ne prend aucun espace sur le disque dur (sauf un peu de méta-information), il n'utilise pas le processeur.
Vous pouvez le vérifier en faisant ceci:
Créer un pipe nommée
$ mkfifo /tmp/testpipe
Allez dans un répertoire, par exemple /home/user/Documents
, et gzip tout ce qui se trouve à l'intérieur, en utilisant le tube nommé.
$ cd /home/user/Documents
$ tar cvf - . | gzip > /tmp/testpipe &
[1] 28584
Ici, vous devriez voir le PID du processus gzip. Dans notre exemple, il s’agissait de 28584.
Maintenant, vérifiez ce que fait ce PID
$ ps u -P 28584
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
c0rp 28584 0.0 0.0 29276 7800 pts/8 S 00:08 0:00 bash
Vous verrez qu'il n'utilise aucune ressource . 0% d'utilisation du processeur, 0% d'utilisation de la mémoire.
Vérifier l'intuition concernant l'utilisation de l'espace fichier
$ du -h /tmp/testpipe
0 testpipe
Et encore 0
rien. Le testpipe peut être réutilisé si nécessaire.
N'oubliez pas de tuer gzip avec kill -15 28584
. Et retirez notre pipe nommée en utilisantrm /tmp/testpipe
Exemples d'utilisation
Vous pouvez rediriger presque tout en utilisant un tube nommé. Comme exemple, vous pouvez voir ce proxy d’une seule ligne .
De plus, voici une autre explication intéressante de l’utilisation des canaux nommés. Vous pouvez configurer deux processus sur un serveur pour qu'ils communiquent en utilisant un canal nommé au lieu d'une pile TCP / IP. Il est beaucoup plus rapide et ne charge pas les ressources du réseau. Par exemple, votre serveur Web peut communiquer avec la base de données directement à l'aide d'un canal nommé, au lieu d'utiliser une localhost
adresse ou d'écouter un port.