

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
fifoファイルとは何か
fifoファイル とは 名前付きパイプ と呼ばれる特別なファイルの一種です。パイプはプロセス間の通信路であり、あるプロセスが書き込んだデータを別のプロセスが読み取る仕組みです。名前付きパイプはファイルシステム上に名前があり、通常のファイルのように長期保存するためではなく、データをストリームとして受け渡すために使われます。First In First Out の性質でデータが流れ、先に入ったデータが先に出ていくのが基本的な挙動です。
fifoファイルは特定の用途に限られます。主に
・異なるプロセス間でデータを受け渡すとき
・一方がデータを送信、もう一方が受信する形を取りたいとき
など、プログラム同士の協調動作を実現する際に使われます。データはファイルに貯蔵されず、カーネルのバッファを経由して入出力が行われます。
fifoファイルと通常のファイルの違い
通常のファイルはデータを長期的に保存する目的で作成されます。一方で fifoファイルは“データを蓄積せず流すための道”です。つまり
・読み取りと書き込みは別々のプロセスで行う
・データは直ちに一方へ渡され、通常はファイルとして終端に達しません
・書き込み側が待機状態になることがあり、読み取り側が準備できていないとデータは転送されません
といった特徴があります。これにより同時に複数のプログラムを組み合わせて動かす際の IPC(プロセス間通信)が非常にシンプルになります。
fifoファイルの作成と基本的な使い方
fifoファイルを作成するには mkfifo コマンドを使います。作成後は通常のファイルと同じようにパスを指定して操作しますが、機能としては“データを渡す道”を作るだけです。
作成の例
$ mkfifo mypipe
権限の確認と必要に応じた変更
$ ls -l mypipe
$ chmod 600 mypipe
読み取り側と書き込み側の基本的な使い方のイメージ
読み取り側の端末
$ cat mypipe
書き込み側の端末
$ echo こんにちは > mypipe
この組み合わせで こんにちは が読み取り側に表示されます。ただしこの例は2つの端末または2つのターミナルを用意して同時に動かす必要があります。片方が待機していないとデータが流れず、どちらか一方が先に動くとデータの受け渡しが開始されます。
実践的な例
2つの端末を使って簡単な連携を作る場合を想定します。端末Aではデータを読み取る役目、端末Bではデータを書き込む役目です。
端末A
cat mypipe
端末B
echo あなたへ届くデータです > mypipe
このようにすると端末Aに あなたへ届くデータです が表示されます。
表で見る基本情報
| コマンド | 用途 |
|---|---|
| mkfifo | FIFOファイルを作成する |
| ls -l | ファイルの権限やタイプを確認する |
| chmod | ファイルの権限を変更する |
| cat | FIFOファイルの読み取りまたは書き込みに使用する |
注意点とヒント
・FIFOはデータを蓄えませんので、必ず読み手と書き手が別々に動作している必要があります。
・書き込みは読み取りが待機状態のときにのみ進み、読み取り側が待機していないとブロックします。
・エラーを回避するためには存在する FIFO を事前に確認し、必要に応じて削除して再作成します。
よくある質問
Q FIFOファイルはどんな場面で使われますか
A 異なるプログラム同士のデータ受け渡しやリアルタイム性の高い連携が必要な場合に使われます。
Q 1つのプロセスだけで使えますか
A 通常は2つ以上のプロセスが関与します。書き手と読み手が別々のプロセスで動作するのが前提です。
まとめ
fifoファイルは名前付きパイプとして知られ、プロセス間のデータ転送を可能にする特別なファイルです。長期保存には向かず、データは流れるように渡されます。mkfifoで作成し、読み取り側と書き込み側を別々の端末やプロセスで動かすことが基本です。初心者のうちからこの仕組みを理解しておくと、プログラム間連携の設計がスムーズになります。
fifoファイルの同意語
- FIFOファイル
- First-In-First-Out の性質を持つ、名前付きパイプとして機能する特別なファイル。mkfifo で作成して、プロセス間でデータを順序通りにやり取りする用途に使われます。
- 名前付きパイプ
- ファイルシステム上に名前を持つパイプのこと。読み書きでデータをやり取りでき、同じ名前を通じて複数のプロセス間で連携します。匿名パイプとは異なり、参照可能な点が特徴です。
- FIFOパイプ
- FIFO(先入れ先出し)機能を持つパイプの別称。データは入れた順番に取り出され、順序保証が必要な通信に適しています。
- パイプファイル
- パイプを表すファイル全般の呼び方。特に名前付きパイプを指すことが多く、データの受け渡しの窓口として使われます。
- named pipe
- 英語表記での呼び名。『名前付きパイプ』のことを指し、UNIX系OSで広く使われる用語です。
- 先入れ先出しファイル
- First-In-First-Out の意味を日本語で表現した別称。技術文脈では“FIFOファイル”の方が一般的ですが、意味は同じです。
- mkfifoで作成されたファイル
- mkfifo コマンドで作成される、名前付きパイプのファイル。データの受け渡し用の窓口として機能します。
fifoファイルの対義語・反対語
- LIFO(Last In, First Out)
- FIFOファイルの対義概念。データの出力順序が、最後に入れたものが最初に出るという原理で、スタックの動作に近い考え方。
- 後入先出
- 同様に、最後に入れた要素が最初に出る原理を指す語。FIFOファイルの反対の動作を説明する際に使われる表現。
- スタック(Stack、LIFO)
- データ構造の一種で、後入先出(LIFO)の性質を持つ。FIFOファイルとは用途も性質も異なるが、対義の動作を直感的に表す概念として挙げられる。
- 通常ファイル(正規ファイル、Regular file)
- FIFOは特殊ファイルの一種だが、通常のファイル(正規ファイル)はデータを連続的に保存・読み出しできる一般的なファイル。用途・性質が異なる対概念として挙げられる。
fifoファイルの共起語
- FIFO
- First-In-First-Out の略。先入先出の性質を指し、FIFOファイルはファイルシステム上の名前付きパイプでデータを順番にやり取りします。
- 名前付きパイプ
- ファイルシステム上に作成できる特殊ファイルで、プロセス間通信 IPC に用いられる入口・出口の役割を果たします。
- mkfifo
- FIFOファイルを作成するコマンド。パイプを名前付きにしてファイルシステム上に配置します。
- パイプ
- プロセス間のデータ連携を可能にする仕組み。匿名パイプと名前付きパイプ(FIFO)があります。
- 匿名パイプ
- 名前のないパイプで、通常は親子プロセス間のデータ転送に使われ、ファイルとしては存在しません。
- IPC
- Inter-Process Communication の略。プロセス間でデータを渡したり同期を取る技術の総称です。
- データストリーム
- 連続したデータの流れ。パイプ経由でストリームとして送られます。
- カーネルバッファ
- カーネルがFIFOのデータを一時的に保持するバッファ。容量が不足するとブロックされます。
- ブロック動作
- 読み取り側や書き込み側がデータ待ちの状態になること。これにより順次性が保たれます。
- 特殊ファイル
- FIFOはファイルシステム上の特殊ファイルの一種です。
- ファイルシステム
- ファイルを管理する階層。FIFOはこの中の特殊ファイルとして扱われます。
- First-In-First-Out
- FIFO の英語表現。最初に入れたデータが最初に出るという意味です。
- 読み取り/書き込み
- FIFOを使うときは読み取り側と書き込み側が別プロセスになるのが基本です。
- 使い道
- プロセス間のデータ共有や同期、情報の受け渡しに用いられます。
- アクセス方法
- FIFOファイルにはパスを指定してアクセスします。mkfifoで作成したファイルパスを通じて読み書きします。
fifoファイルの関連用語
- FIFOファイル
- ファイルシステム上の特殊ファイルで、プロセス間通信に使われる。データは先入先出(First-In-First-Out)の順で流れ、書き込み側と読み取り側の2つの端を持ちます。
- 名前付きパイプ
- ファイル名で参照できるパイプ。複数のプロセスが同じパスを介して通信でき、mkfifo で作成します。
- 匿名パイプ
- ファイルとしては存在せず、pipe() で作成されるパイプ。通常は同じ実行中の関連プロセス間で使います。
- パイプ(Pipe)
- プロセス間通信の基本手段。データを1方向に流すストリーム状の仕組みで、無名パイプと名前付きパイプの総称です。
- mkfifo
- 名前付きパイプを作成するコマンドまたはシステムコール。作成後にファイル名を介して通信します。
- S_IFIFO
- POSIX のファイルタイプで、FIFO(名前付きパイプ)を示します。inode の種別として識別されます。
- PIPE_BUF
- 1回の書き込みで原子性を保証される最大バイト数。POSIX 規定の最低値は512バイト、実装により4096バイト程度が多いです。
- IPC(プロセス間通信)
- 複数のプロセス間でデータを交換する仕組みの総称。FIFO はそのうちの一つの方法です。
- 先入先出(FIFO)
- データが最初に入った順に取り出される性質のこと。FIFOファイルではこの順序でデータが流れます。
- 読み取り端/書き込み端
- FIFO にはデータを書き込む端と読み取る端があり、片方が開かれるともう片方が待機することがあります。
- open/close
- FIFO を開く(open)・閉じる(close)操作。ブロッキング動作を制御します。
- 特殊ファイル/ファイルタイプ
- FIFO は通常のテキストファイルとは別の『特殊ファイル』として扱われ、inode によって管理されます。
- inode
- ファイルのメタ情報を格納するデータ構造。FIFO も inode に紐づく特別なファイルです。
- 権限(パーミッション)
- FIFO への読み取り・書き込みの権限はファイルのパーミッションで制御されます。
- パイプ容量
- カーネルが確保する内部バッファの容量。データはこのバッファに蓄えられ、読者が来るまで待つことがあります。
- ブロックIO/ノンブロックIO
- FIFO は通常ブロックモードで動作します。データがすぐに読めない場合、呼び出しは待機します。ノンブロックモードも設定可能です。
- Unixドメインソケット
- 同一ホスト上のプロセス間通信に使われる別の IPC 手段。FIFO とは異なる特徴とAPIを持ちます。
fifoファイルのおすすめ参考サイト
- 名前付きパイプ(named pipe, FIFO)の基本的な使い方
- FIFOとは?意味をわかりやすく簡単に解説 - trends
- QoS - FIFO(First In, First Out)とは - ネットワークエンジニアとして
- FIFO(LILO / 先入先出法)とは - IT用語辞典 e-Words



















