fifo

Autres langues

Langue: ja

Autres versions - même langue

Version: 1999-06-20 (mandriva - 01/05/08)

Autres sections - même nom

Section: 7 (Divers)

名前

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

書式

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

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

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

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

注意

プロセスが、反対の読み込み側がオープンされていない FIFO を 書き込みのためにオープンしようとした場合、そのプロセスに SIGPIPE シグナルが送られる。

FIFO 特殊ファイルは mkfifo(3) で作成される。また ls -l によって特殊な表示がされる。

関連項目

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