Presque tout dans Linux peut être considéré comme un fichier mais la principale différence entre un fichier régulier et un tuyau nommé est qu'un tuyau nommé est un exemple particulier de fichier qui n'a pas de contenu sur le système de fichiers.
Voici une 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 en lecture ou en écriture. Lorsque des 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 dans le système de fichiers ; l'entrée dans le système de fichiers sert simplement de point de référence pour que les processus puissent accéder au tuyau en utilisant un nom dans le système de fichiers.
Le noyau maintient exactement un objet pipe 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 de la FIFO se bloque jusqu'à ce que l'autre extrémité soit également ouverte.
En fait, un tuyau nommé ne fait rien jusqu'à ce qu'un processus le lise ou l'écrive. Il ne prend pas de place sur le disque dur (à l'exception d'un peu de méta-information), il n'utilise pas le processeur.
Vous pouvez le vérifier en procédant comme suit :
Créer un tuyau nommé
$ mkfifo /tmp/testpipe
Allez dans un répertoire, par exemple /home/user/Documents
et gzip tout ce qu'il contient, en utilisant named pipe.
$ cd /home/user/Documents
$ tar cvf - . | gzip > /tmp/testpipe &
[1] 28584
Vous devriez voir ici le PID du processus gzip. Dans notre exemple, il s'agit de 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'il utilise pas de ressources . 0 % d'utilisation du processeur, 0 % d'utilisation de la mémoire.
Vérifier l'intuition concernant l'utilisation de l'espace disque
$ du -h /tmp/testpipe
0 testpipe
Et encore 0
rien. Le tuyau d'essai pourrait être réutilisé si nécessaire.
N'oubliez pas de tuer gzip, en utilisant kill -15 28584
. Et supprimez notre tuyau nommé en utilisant rm /tmp/testpipe
Exemples d'utilisation
Vous pouvez presque tout rediriger à l'aide d'un tube nommé. Voici un exemple mandataire d'une ligne .
En outre en voici un autre bonne explication de l'utilisation des tuyaux nommés. Vous pouvez configurer deux processus sur un serveur pour qu'ils communiquent à l'aide d'un tube nommé au lieu de la pile TCP/IP. C'est beaucoup plus rapide et cela 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 tube nommé, au lieu d'utiliser le protocole localhost
ou à l'écoute d'un port.