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.41 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。