質問: > > パイプとは、プロセス間通信方式の一つで、あるプログラムの出力を、別のプログラムに入力する機能。元々はUNIXの機能だが、Windows NTなどにも用意されている。 > > プログラムの出力結果をファイルに保存することなく別のプログラムに入力することができるため、あるプログラムの出力を別のプログラムに入力し、さらにその出力を別のプログラムに入力し...、といった具合に、パイプをつないでデータを流すように、プログラムを連結することができる。 > > > 名前付きパイプと違って一方的にデータを送るので、相互にやり取りできるわけではない。また、同じコンピュータ内のプログラム同士でしか通信できず、ネットワークを経由して他のマシンにデータを送ることはできない。 > > > パイプとUNIXソケットの違いは何ですか。
回答: 質問者さんが引用されている文がUNIX系OSとWindowsを一緒に説明しようとしているのもあって、誤解を招き易いのかもしれません。私もご質問の意図を汲み取っていない可能性もありますが、回答を試みてみます(汗) > > パイプとUNIXソケットの違いは何ですか。 > > > 質問者さんが言うパイプとはUNIX系OSのシステムコールの`pipe(2)`のことを指すものだと思います。 コマンドライン上での標準入出力のパイプ(`|`)を実現する為に使われています。これは「名前なしパイプ」です。 Linuxの例ですが pipe(2) How Linux pipes work under the hood UNIXソケットとは、**UNIXドメインソケット**のことを指していると思いますが、システムコールが違い、`socket(2)` で`AF_UNIX`を指定して作成するソケットを使い、通信するものです。 同一マシン上でWEBサーバーとDBサーバー間で高速に通信する場合などに使われています。 unix(7) socket(2) 名前なしパイプもUNIXドメインソケットどちらも、同一マシン内でしか通信できません。 Windowsで言うパイプとは、CreateNamedPipe APIを使って作る「名前つきパイプ」です。このWindowsの名前つきパイプは外部(リモート)のマシンとも通信することができます。 ここでまたややこしいのは、Windowsのコマンドプロンプト上で標準入出力を取り扱う上で使う`|`記号も「パイプ」と呼ぶことです。この場合のパイプはUNIX系OSでのコマンドライン上の標準入出力のパイプ(`|`)と同じ用途で使っている言葉なので、区別して理解する必要があります。 (WindowsのコマンドプロンプトがMS-DOS由来で、更にそのMS-DOSがUNIX系OSの操作体系を参考に造られている為に用語が重なるのですが)