Question

Quelles sont les différences entre les tubes sous Windows et Linux?

Était-ce utile?

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:

Que sont les canaux nommés?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top