名前

fifo - FIFO 特殊ファイル、名前付きパイプ

説明

FIFO 特殊ファイル (名前付きパイプ) はパイプに似ているが、 FIFO はファイルシステムの一部に関連付けられている点が異なる。複数のプロセスが読み込みや書き込みのために FIFO をオープンすることができる。プロセスが FIFO を通してデータを交換する場合、カーネルは、データを実際にはファイルシステムに書き込まず、すべてのデータを内部的に渡す。このように、 FIFO 特殊ファイルはファイルシステム上には内容を持たない。ファイルシステムのエントリーは、プロセスがファイルシステム上の名前を使用してそのパイプにアクセスできるように参照ポイントを提供しているだけである。
カーネルは、少なくとも一つのプロセスによってオープンされている FIFO 特殊ファイルに関して、 1 つの FIFO 特殊ファイルにつき 1 つのパイプオブジェクトを管理する。データを渡す前に、 FIFO の両端 (書き込み側と読み出し側) がオープンされていなければならない。通常、 FIFO をオープンしようとした場合、その反対側がオープンされるまで停止 (block) される。
プロセスは FIFO を非停止 (nonblocking) モードでオープンすることもできる。この場合、読み込み専用でオープンしようとした場合には、書き込み側を誰もオープンしていなくても成功する。書き込み専用でオープンしようとした場合には、反対側がすでにオープンされていない限り、 ENXIO (そのようなデバイスまたはアドレスは存在しない) というエラーで失敗する。
Linux では、 FIFO を読み書き両用でオープンした場合、 停止、非停止のどちらのモードでも成功する。 POSIX では、この場合の動作は定義されていない。この動作は、読み込み側がいない時に書き込み用に FIFO をオープンするために使用できる。自分自身と通信するために FIFO の両端を使用するプロセスでは、デッドロックを避けるために細心の注意を払う必要がある。

注意

FIFO における入出力の動作の詳細については、 pipe(7) を参照のこと。
プロセスが、反対の読み込み側がオープンされていない FIFO に書き込もうとした場合、そのプロセスに SIGPIPE シグナルが送られる。
FIFO 特殊ファイルは mkfifo(3) で作成することができ、 ls -l ではファイル種別 'p' で表示される。

関連項目

mkfifo(1), open(2), pipe(2), sigaction(2), signal(2), socketpair(2), mkfifo(3), pipe(7)

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。

Recommended readings

Pages related to fifo you should read also: