2013-09-02 168 views
35

私はいくつかの答えを見つけましたが、具体的にはWindowsマシンに関連しているようです。 パイプとソケットの違いは何ですか?そして、いつ/どのように選択する必要がありますか?パイプとソケットの違いは何ですか?

答えて

48

パイプとソケットの違いは何ですか?また、パイプとソケットの違いは何ですか。 ...

パイプやソケットの両方がバイトストリームを扱うが、彼らはさまざまな方法でそれを行う

  • パイプは、特定のホスト内に存在し、それらが仮想ファイル間のバッファリングを参照する、または接続そのホスト内のプロセスの出力/入力パイプ内にパケットの概念はありません。
  • ソケットは、IPv4またはIPv6を使用して通信をパケット化します。その通信はlocalhostを超えて拡張することができます。ソケットの異なるエンドポイントが同じIPアドレスを共有できることに注意してください。ただし、異なるTCP/UDPポートでリスンする必要があります。

使用

  • 使用パイプ:
    • あなたが特定のサーバー内のファイルとして/書き込みデータを読みたい 。 Cを使用している場合は、read()write()をパイプに接続します。あなたが別のプロセスの入力に一つのプロセスの出力を接続したいとき
    • ...違うのIPv4/IPv6のエンドポイント間でデータを送信するためにpopen()
  • 使用ソケットを参照してください。あなたはパイプにソケットを結合するためにnetcatまたはsocatを使用することができ、非常に多くの場合、これは、異なるホスト間で起こるが、ソケットは

ところで、同じホスト内で使用することができます。

8

マイクの答えを完成させるには、UNIXドメインソケットの存在が重要です。これはPOSIX準拠のオペレーティングシステムで利用できます。使用法の点で "通常の"インターネットソケットと非常に似ていますが、それらは純粋にマシンのローカルです(もちろんインターネットソケットもローカルで動作することができます)。したがって、ほとんどパイプのように動作します。 UNIXパイプは一方向の定義によるものであるため、ほぼ、(また、名前付きパイプとしても知られる)

パイプとFIFOは一方向 プロセス間通信チャネルを提供します。パイプにはリードエンドとライト があります。パイプの書き込み側に書き込まれたデータは、読み取り側のパイプの から読み取ることができます。 (man page pipe(7)から抜粋)データのほかに、彼らはまた、ファイルディスクリプタを送信することを可能と

UNIXドメインソケットはまた、非常に珍しい機能を持っています。このように、非特権プロセスはその記述送られたすべてのファイルにアクセスすることができますソケットの上に。この技術は、Wikipediaによると、ClamAVアンチウイルススキャンデーモンによって使用されています。