Presque tout dans Linux peut être considéré comme un fichier , mais la principale différence entre un fichier normal et un fichier nommé est qu’un fichier nommé pipe est une instance spéciale d'un fichier qui n'a aucun contenu sur le système de fichiers.
Voici la citation de man fifo
:
Un fichier spécial FIFO (un tube nommé) est similaire à un tube, sauf qu’il est accessible dans le cadre du système de fichiers. Il peut être ouvert par plusieurs processus pour lire ou écrire. Lorsque des processus échangent des données via le 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 du système de fichiers sert simplement de point de référence pour que les processus puissent accéder au canal en utilisant un nom dans le système de fichiers.
Le noyau conserve exactement un objet pipe pour chaque fichier spécial FIFO ouvert par au moins un processus. Le FIFO doit être ouvert 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 ouverte également.
Donc, en fait, un canal nommé ne fait rien tant que certains processus ne le lisent et ne l’écrivent pas. Il ne prend pas de place sur le disque dur (sauf un peu de méta-informations), il n'utilise pas le processeur.
Vous pouvez le vérifier en procédant ainsi:
Créer un canal nommé
$ mkfifo /tmp/testpipe
Accédez à certains répertoires, par exemple /home/user/Documents
, et compilez tout ce qu’il contient, en utilisant le canal nommé.
$ cd /home/user/Documents
$ tar cvf - . | gzip > /tmp/testpipe &
[1] 28584
Ici, vous devriez voir le PID du processus gzip. Dans notre exemple, c'était 28584.
Vérifiez maintenant 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’elle utilise pas de ressources . 0% d'utilisation du processeur, 0% d'utilisation de la mémoire.
Vérifier l'analyse concernant l'utilisation de l'espace fichier
$ du -h /tmp/testpipe
0 testpipe
Et encore 0
, rien. Le testpipe pourrait être réutilisé si nécessaire.
N'oubliez pas de tuer gzip, en utilisant kill -15 28584
. Et supprimez notre canal nommé en utilisant rm /tmp/testpipe
Exemples d’utilisation
Vous pouvez rediriger presque tout en utilisant le canal nommé. Comme exemple, vous pouvez consulter cette proxy à une ligne .
De plus, en voici une de plus , une bonne explication de l’utilisation des canaux nommés. Vous pouvez configurer deux processus sur un serveur pour communiquer en utilisant un canal nommé au lieu de la pile TCP / IP. Il est beaucoup plus rapide et ne charge pas les ressources réseau. Par exemple, votre serveur Web peut communiquer directement avec la base de données en utilisant un canal nommé, au lieu d'utiliser localhost
address ou d'écouter un port.