FIFO、パイプ、およびUnixドメインソケットはLinuxカーネルで同じですか?

FIFO、パイプ、およびUnixドメインソケットはLinuxカーネルで同じですか?

FIFOという名前がパイプだと聞きました。そしてそれらはまったく同じ意味を持っています。一方、Unixドメインソケットはパイプに非常に似ていると思います(使用したことはありませんが)。だから、どちらもLinuxカーネルで同じ実装を参照しているのだろうか?どんなアイデアがありますか?

ベストアンサー1

UNIXドメインソケットとFIFOは実装の一部を共有できますが、概念的には非常に異なります。 FIFOは非常に低いレベルで動作します。あるプロセスはパイプにバイトを書き込み、もう一方のプロセスはパイプからバイトを読み込みます。 UNIXドメインソケットは、TCP / IPまたはUDP / IPソケットと同様に動作します。

ソケットは双方向であり、多くのプロセスで同時に使用できます。プロセスは同じソケットで複数の接続を許可し、複数のクライアントを同時に処理できます。カーネルは毎回新しいファイル記述子を渡すconnect(2)か、accept(2)ソケットから呼び出されます。パケットは常に正しいプロセスに移動します。
FIFOではこれは不可能です。双方向通信には2つのFIFOが必要で、各クライアントには1対のFIFOが必要です。書き込みや読み取りはより原始的な形式のコミュニケーションであるため、選択的に書き込む方法はありません。

匿名パイプはFIFOと非常によく似ています。違いは、匿名パイプはファイルシステムにファイルとして存在しないため、どのプロセスもそうすることopen(2)ができないことです。他の方法で共有するプロセスで使用されます。プロセスがパイプを作成してaを実行すると、その子プロセスfork(2)はパイプを含むファイル記述子を継承します。 (名前付きパイプ/FIFOのファイル記述子も同じ方法で渡すことができます。)

UNIX ドメインソケット、匿名パイプ、および FIFO は、カーネル処理システムの呼び出しとメカニズムの抽象化とともに、ファイル記述子を使用してプロセス間通信を提供するという点で似ています。

おすすめ記事