EN JA
FIFO(7)
FIFO(7) Linux Programmer's Manual FIFO(7)

名前

fifo -先入先出特殊ファイル、名前付きパイプ

説明

FIFO 特殊ファイル(名前付きパイプ)はパイプに似ているが、ファイルシステムの一部に関連付けられている点が異っている。複数のプロセスが読み込みや書き込みのためにオープンすることができる。プロセスが FIFO を通しデータを交換する場合、実際にそれをファイルシステムには書き込まず、カーネルは全てのデータを内部的に渡す。このように、FIFO 特殊ファイルはファイルシステム上には内容を持たないので、ファイルシステムのエントリはプロセスがそのファイルシステム上の名前を使用してそのパイプにアクセスできるように参照ポイントを提供しているに過ぎない。

カーネルは、少なくとも一つのプロセスによってオープンされている FIFO 特殊ファイルについて、それぞれ一つのパイプのみを管理している。データが渡される前にその FIFO の両端(書き込みと読み出し)がオープンされていなければならない。通常、FIFO をオープンすると、その反対側がオープンされるまで停止(block)させられる。

プロセスは FIFO を非停止(nonblocking)モードでオープンすることもできる。この場合、読み込み専用でオープンした場合には書き込み側を誰もオープンしていなくても成功する。書き込み専用でオープンした場合は反対側が既にオープンされていなければ ENXIO (そのようなデバイスまたはアドレスは存在しない) というエラーで失敗する。

Linux では、FIFO を読み込みと書き込み両用にオープンした場合、停止、非停止のどちらのモードでも成功する。POSIX ではこの場合の動作は定義されていない。これは読み込み側がいない時に書き込み用にオープンするために使用することができる。自分自身と通信するために両端を使用するプロセスはデッドロックを避けるために非常に注意深くなければならない。

注意

プロセスが、反対の読み込み側がオープンされていない 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 プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2008-12-03 Linux