19

Windows と Linux のパイプの違いは何ですか?

4

4 に答える 4

25

私が知っている違いの 1 つは、Linux での名前付きパイプはファイル システムの実際のエントリであるということです (ディレクトリ リストに表示されます。特殊なタイプがあります)。一方、Windows では、名前付きパイプはどこかの魔法のリポジトリに格納されます (それらはすべてパス「\\.\pipe\」経由でアクセスされます。

第二に、Linux では、標準のファイル IO メソッドを使用して、他のファイルであるかのように、パイプから書き込み/読み取りを行うことができます。一方、Windows では、Win32 API の一部である特別な「パイプ」関数を使用する必要があります。

Linux の方法の方が好きです。必要なアプリでパイプを使用できるからです。例えば:

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

これにより、最初に MP3 全体をディスク上の WAV ファイルにデコードする代わりに、MP3 デコーダーの出力をビデオ デコーダーに直接パイプすることができます。デュアルコア CPU を使用している場合は、両方の操作を同時に実行して高速化できるので便利です。

于 2008-10-10T16:37:26.707 に答える
7

もう一つの重要な違い

窓の下

A | B | C 

A の出力が完了するまで、B は読み取りを開始しません。B の出力が C によって読み取られる場合も同様です。

*nix は入力と出力を一緒にフックして、A と B がまだ実行されている間に C が B の出力を読み取り、B が A の出力を読み取ることができるようにします。

スループットはほぼ同じですが、出力は *nix の方が高速です。

于 2016-07-21T19:04:49.050 に答える
5

Linux (および一般的な *ix) では、「すべてがファイル」です。これらの操作が理にかなっている限り、パイプ、ソケット、およびデバイスを制限なしで読み取り/書き込み/シークできます。

一方、Windows のアーキテクチャは、これらのさまざまな種類のオブジェクトに対してあまり統一されていません。詳しくは言えませんが、Windows と Linux ではパイプのバッファリングがかなり違うので、そこで苦労するかもしれません。

また、パイプの Unix-y での一般的な使用法の 1 つはfork()、サブプロセスに対して、パイプを介して通信することです (親は一方の端を開き、子はもう一方の端を開きます)。Windows では、そのようなことはまったく不可能です。IPC メカニズムはまったく異なります。

于 2008-10-10T19:23:54.750 に答える
4

前のスレッドも参照してください。

名前付きパイプとは何ですか?

私のテイクと他の何人かの人々が含まれています

于 2008-10-10T19:40:47.883 に答える