Créer des pipe en C sur Windows
Bonjour à tous,
Il y a quelques jours j'ai posté une autre question sur ce forum. Dans les réponses quelqu'un m'a suggéré d'utiliser les pipes, or si j'ai réussi à trouver ce que c'est, j'ai toutes les peines du monde à trouver des infos sur le sujet. Et encore plus en sachant que je développe sous Windows. Si certains parmi vous avaient des informations ou des tutoriels clairs et simples à me partager ce serait merveilleux je vous en remercie par avance.
- Créer des pipe en C sur Windows
- New pipe - Guide
- NewPipe : l'appli Android pour regarder YouTube sans pubs - Forum YouTube
- Pip n'est pas reconnu en tant que commande interne ✓ - Forum Python
- 'Pip' n’est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes. ✓ - Forum Programmation
- New pipe avis - Forum YouTube
2 réponses
Bonjour,
Le principe d'un pipe, c'est de rediriger un flux de données d'un processus vers un autre. Conceptuellement (surtout au sens Unix), un pipe n'est qu'un fichier (un peu particulier), et donc s'ouvre quand on en a besoin (avec popen) et doit être fermé quand on n'en a plus besoin (avec pclose). Cela réclame donc une certaine rigueur si tu veux faire les choses proprement (et surtout, quelque chose qui marche !).
Pour apprendre à les utiliser tu peux regarder cette vidéo. L'utilisation semble la même sous WIndows que sous Linux, et ce même si les pipes n'existent pas en ligne de commande sous windows.
Dans ton autre discussion, une approche basée sur les pipes peut effectivement marcher. Par exemple, sous Linux, dans un shell, si on veut surveiller un fichier (typiquement un log système) en temps réel on peut utiliser la commande tail -f. Si on ne s'intéresse qu'aux lignes qui satisfont un certain motif, alors les filtrer à l'aide d'un pipe (noté | en shell) et de grep :
sudo tail -f /var/log/syslog | grep -i "opened"
Exemple :
(mando@cenedra) (~) $ sudo tail -f /var/log/auth.log | grep -i "opened" 2024-07-30T18:34:36.818662+02:00 cenedra sudo: pam_unix(sudo:session): session opened for user root(uid=0) by mando(uid=1000) 2024-07-30T18:34:42.387464+02:00 cenedra sudo: pam_unix(sudo:session): session opened for user root(uid=0) by mando(uid=1000) 2024-07-30T18:35:14.175169+02:00 cenedra sudo: pam_unix(sudo:session): session opened for user root(uid=0) by mando(uid=1000) 2024-07-30T18:35:20.323815+02:00 cenedra sudo: pam_unix(sudo:session): session opened for user root(uid=0) by mando(uid=1000)
Cependant, ce n'est pas la manière dont je le ferais :
- Sous Linux, on utiliserait plutôt inotify que des pipes
- Sous Windows, il semble exister des équivalents d'inotify (voir cette discussion).
Bonne chance
@mamiemando:
> même si les pipes n'existent pas en ligne de commande sous windows
Que veux-tu dire?
Si j'ai un fichier qui contient les chiffres de 5 à 1 (un chiffre par ligne), je peux faire sous cmd:
type fichier.txt | sort
qui me les donnera en ordre croissant.
J'utilise ce genre de choses très régulièrement sous cmd.