Frage

Was sind die Unterschiede zwischen den Rohren in Windows und Linux?

War es hilfreich?

Lösung

Ein Unterschied, den ich kenne, ist, dass Named Pipes unter Linux sind aktuelle Einträge im Dateisystem (Sie es in einer Verzeichnisliste sehen werden, haben sie eine besondere Art), während auf Windows sie in einem gewissen magischen Repository gespeichert sind, irgendwo (sie alle sind über den Pfad "\\. \ pipe \".

zugegriffen

Zweitens in Linux können Sie einfach schreiben / aus Rohren lesen, als ob sie eine andere Datei waren, Standard-Datei IO-Methoden. Während auf Fenster, müssen Sie die speziellen ‚Pipe‘ Funktionen, den Teil des Win32-API ist.

Ich mag Linux-Methode besser, weil es mir mit jedem App verwenden Rohren lässt ich will. Zum Beispiel:

mkfifo pipe.wav
decodeMP3 song.mp3 --out pipe.wav &
encodeAVI video.mpeg pipe.wav --out video.avi

Das lässt mich Rohr den Ausgang des MP3-Decoder direkt in den Videodecoder, anstatt dass zuerst die gesamte MP3 in eine WAV-Datei auf der Festplatte entschlüsseln. Es ist praktisch, wenn Sie einen Dual-Core-CPU haben, denn dann werden Sie beide Operationen gleichzeitig ausgeführt wird, für einen schönen Speedup.

Andere Tipps

Unter Linux (und * ix im Allgemeinen), "Alles ist eine Datei". Sie können Lese- / Schreibzugriff / suchen Leitungen und Steckdosen und Geräte ohne Einschränkungen, soweit diese Vorgänge Sinn machen.

Während Windows-weit weniger einheitliche Architektur für diese verschiedenen Arten von Objekten hat. Obwohl ich Ihnen die Details nicht sagen konnte, weiß ich, dass Pufferung von Rohren zwischen Windows und Linux erheblich unterschiedlich ist, so können Sie in Schwierigkeiten dort ausführen.

Auch eine gemeinsame Unix-y Verwendung von Rohren ist ein Subprozess fork() und dann mit ihm über eine Leitung kommunizieren (die Mutter öffnet ein Ende öffnet sich das Kind das andere Ende). Unter Windows, so etwas ist einfach nicht möglich. IPC-Mechanismen sind recht unterschiedlich.

Siehe auch den vorherigen Thread:

Was Named Pipes werden?

Welche mein nehmen und einige andere Völker

enthält

Ein weiterer wichtiger Unterschied

Unter Windows

A | B | C 

Bis A erfolgte mit ihm ist der Ausgang B nicht das Lesen beginnt, Das gleiche gilt für B-Ausgang von C gelesen werden

* nichts hakt die Eingabe und Ausgabe zusammen, so dass C B Ausgabe lesen und B kann noch A dem Ausgang während A und B gelesen ausgeführt

Der Durchsatz ist etwa die gleiche, aber Ausgabe zeigt, schneller mit * nichts.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top