Oubliez le web, revenez 30 ans en arrière, comment faisaient les process (programmes) pour communiquer?
Les named pipe sont une technologie qui le permettent, mais il y a aussi les sockets. Mais dans cet article on va parler uniquement des named pipes.
Contenu
Mais d’abord c’est quoi les pipes?
Dans Linux un pipe est représenté par le caractère | (une barre verticale)
commande 1 | commande 2
Dans l’exemple ci-dessus, la sortie de la commande 1 est passée en entrée de la commande 2.
Second exemple: ps aux la commande ci-dessus nous permet de lister tous les process en cours. ....... apple 79180 0,0 0,2 67548168 32508 ?? S 9:40 0:00.29 /Applications/Go apple 75919 0,0 0,0 34151264 1908 s005 S 9:25 0:00.08 -bash root 75918 0,0 0,0 34151500 4856 s005 Ss 9:25 0:00.03 login -pf apple apple 75772 0,0 0,0 33619312 2640 s004 Ss+ 9:25 0:00.03 /usr/local/bin/b .......
Il y en a des centaines. On va filtrer la ou les lignes qui contiennent le mot ‘bash’, (vous pouvez choisir le mot que vous voulez). Pour ce faire on va utiliser grep qui permet de chercher dans un fichier un mot ou une expression.
ps aux | grep bash apple 75919 0,0 0,0 34151264 1908 s005 S 9:25 0:00.08 -bash apple 75772 0,0 0,0 33619312 2640 s004 Ss+ 9:25 0:00.03 /usr/local/bin/bash --init-file /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh apple 88204 0,0 0,0 34122828 836 s007 S+ 10:20 0:00.00 grep bash apple 83845 0,0 0,0 34151264 1924 s007 S 10:00 0:00.04 -bash apple 81464 0,0 0,0 34151264 1876 s006 S 9:50 0:00.03 -bash
la réunion de deux commandes avec pipe nous permet d’avoir un affichage plus restreint.
C’est quoi un named pipe?
un named pipe est un fichier qui permet de faire transiter des messages, dans la logique du premier entré premier sorti ( First In First Out en anglais, sous l’acronyme FIFO). Le fait que ce soit un fichier (un peu spécial) fait qu’il est persistent, jusqu’à ce qu’il soit effacé. Un named pipe permet de faire communiquer des process qui n’ont aucun lien entre eux ! Vous pouvez imaginer comme un téléphone pour les programmes.
Création d’un named pipe
la création se fait avec la commande mkfifo $ mkfifo mypipe ls -l total 0 prw-r--r-- 1 apple staff 0 15 fév 21:42 mypipe
Regardez la sortie de la commande ls -l, la première lettre est « p » comme pipe.
Ecriture et lecture d’un named pipe
Dans ce terminal écrivez quelque chose et passez le au pipe :
echo 'Hello le named pipe!' > mypipe après avoir écrit cette commande, le shell ne vous rend pas la main ouvrez un second terminal et tapiez la commande $ cat < mypipe Hello le named pipe!
Un exemple plus consistant
Ouvrez un premier terminal et mettez ce code shell :
$ while true;do > echo "message at $(date)" > mypipe > sleep 2 > done
Ce script va toutes les 2 secondes afficher le message avec la date et l’envoyer à mypipe. (Pour taper un script multiligne, utilisez la combinaison SHIFT + ENTREE pour sauter une ligne.)
Ouvrez un second terminal et tapez la commande pour lire la sortie de mypipe:
cat < mypipe message at Sam 15 fév 2025 22:32:53 CET $
Aussitôt le message lu le shell vous rend la main Essayez d’enchainer rapidement deux cat < mypipe, si rien n’est dispo à la sortie, le shell ne vous rend pas la main. Notez que si vous attendez un peu trop longtemps,les messages se perdent donc il faut lire de façon continue, ce que nous allons faire avec tail.
tail -f < mypipe
Faire une boucle pour écouter continuellement des message
#Le code ci-dessous va écouter en permanence des messages venant du pipe while true; do cat < mypipe; done # ouvrez un second terminal dans le même hôte et faites $ echo "un message" > mypipe #le code ci dessus va envoyer un message au pipe et rendre la main.
Ecrire sur un named pipe vers un hôte distant (A venir)
Avec Linux, il est très facile via SSH de traverser la frontière du cyberespace !Allez sur un serveur Linux er créez un named pipe.