Quelles sont les différences entre les tubes sous Windows et Linux?
-
08-07-2019 - |
Question
Quelles sont les différences entre les tubes sous Windows et Linux?
La solution
À ma connaissance, les canaux nommés sous Linux sont des entrées réelles dans le système de fichiers (vous le verrez dans une liste de répertoires, ils ont un type spécial), alors que sur Windows, ils sont stockés dans un référentiel magique. quelque part (ils sont tous accessibles via le chemin "\\. \ pipe \".
Deuxièmement, sous Linux, vous pouvez simplement écrire / lire à partir de pipes comme s'il s'agissait de tout autre fichier, en utilisant des méthodes IO de fichier standard. Alors que sur Windows, vous devez utiliser les fonctions spéciales "Pipe" qui font partie de l'API Win32.
J'aime mieux la méthode linux, car elle me permet d’utiliser des pipes avec n’importe quelle application que je veux. Par exemple:
mkfifo pipe.wav
decodeMP3 song.mp3 --out pipe.wav &
encodeAVI video.mpeg pipe.wav --out video.avi
Cela me permet de diriger directement la sortie du décodeur MP3 dans le décodeur vidéo, au lieu d’avoir à décoder tout le format MP3 dans un fichier WAV sur disque. C'est pratique si vous avez un processeur dual-core, car vous exécutez les deux opérations en même temps, pour une plus grande rapidité.
Autres conseils
Sous Linux (et * ix en général), "tout est un fichier". Vous pouvez lire / écrire / rechercher des tubes, des sockets et des périphériques sans aucune restriction, dans la mesure où ces opérations ont un sens.
Alors que Windows a une architecture beaucoup moins unifiée pour ces différents types d’objets. Bien que je ne puisse pas vous donner les détails, je sais que la mise en mémoire tampon des canaux diffère considérablement entre Windows et Linux, de sorte que vous pouvez rencontrer des difficultés ici.
De plus, une utilisation courante des tubes dans Unix-y est de fork ()
puis de communiquer avec ce dernier via un canal (le parent ouvre une extrémité, le fils ouvre l'autre). Sous Windows, ce genre de chose n'est tout simplement pas possible. Les mécanismes IPC sont très différents.
Voir aussi le fil précédent:
Qui contient ma prise et celle de plusieurs autres peuples
Une autre différence importante
Sous Windows
A | B | C
Jusqu'à ce que A soit terminé avec sa sortie B ne commence pas à lire, la même chose pour la sortie B lue par C
* nix relie l’entrée et la sortie pour que C puisse lire la sortie de B et que B puisse lire la sortie de A alors que A et B sont toujours en cours d’exécution
Le débit est à peu près identique, mais la sortie s'affiche plus rapidement avec * nix.