パイプとUNIXソケットの違い
解決済
回答 2
投稿
- 評価
- クリップ 1
- VIEW 1,130
パイプとは、プロセス間通信方式の一つで、あるプログラムの出力を、別のプログラムに入力する機能。元々はUNIXの機能だが、Windows NTなどにも用意されている。
プログラムの出力結果をファイルに保存することなく別のプログラムに入力することができるため、あるプログラムの出力を別のプログラムに入力し、さらにその出力を別のプログラムに入力し…、といった具合に、パイプをつないでデータを流すように、プログラムを連結することができる。名前付きパイプと違って一方的にデータを送るので、相互にやり取りできるわけではない。また、同じコンピュータ内のプログラム同士でしか通信できず、ネットワークを経由して他のマシンにデータを送ることはできない。
パイプとUNIXソケットの違いは何ですか。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+4
質問者さんが引用されている文が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ドメインソケットどちらも、同一マシン内でしか通信できません。
Windowsで言うパイプとは、CreateNamedPipe APIを使って作る「名前つきパイプ」です。このWindowsの名前つきパイプは外部(リモート)のマシンとも通信することができます。
ここでまたややこしいのは、Windowsのコマンドプロンプト上で標準入出力を取り扱う上で使う|
記号も「パイプ」と呼ぶことです。この場合のパイプはUNIX系OSでのコマンドライン上の標準入出力のパイプ(|
)と同じ用途で使っている言葉なので、区別して理解する必要があります。
(WindowsのコマンドプロンプトがMS-DOS由来で、更にそのMS-DOSがUNIX系OSの操作体系を参考に造られている為に用語が重なるのですが)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
ご質問が大雑把なので回答も大雑把なのがよいと思います。
パイプはあらかじめ通信するプロセス同士を直接意識できるような場面で使うものです。例えば親プロセスが子プロセスと直接やりとりする場合とか、兄弟プロセスの間でやりとりする場合が典型的です(名前なしパイプ)
一方、ソケットはIPアドレスとポートなど、通信端点のプロセスを特定する情報を指定して、世界中の任意の計算機上のプロセス間でやりとりを可能とするものです。
とりあえず最初の段階では「どういうプロセスの間でのやりとりに使うかが違う」と理解すればよいのではないでしょうか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。