【なまえつきぱいぷ】

名前付きパイプ とは?

💡 ファイルに見えて実はデータの筒、名前を持ったプロセス間の専用通路
📌 このページのポイント
名前付きパイプ(FIFO)の仕組み プロセス A 書き込み側 echo hello > /tmp/p 名前付きパイプ /tmp/mypipe A B C 先入れ先出し(FIFO) プロセス B 読み取り側 cat /tmp/p 通常のパイプ( | ) 親子プロセス間のみ・名前なし・一時的 名前付きパイプ(FIFO) 無関係プロセス間・名前あり・永続的
名前付きパイプ(FIFO)によるプロセス間通信のイメージ
ひよこ ひよこ

パイプって`ls | grep txt`みたいに使うやつだよね?名前付きパイプって何が違うの?

ペンギン先生 ペンギン先生

普通のパイプは`|`でつないだコマンドの親子間だけで使えるんだけど、名前付きパイプファイルシステムに名前(パス)で登録されるから、全然関係ないプロセス同士でも使えるんだよ。

ひよこ ひよこ

ファイルシステムに登録されるって、普通のファイルと見た目は同じなの?

ペンギン先生 ペンギン先生

`ls -l`で見ると先頭が`p`になっていて、FIFOファイルとも呼ばれるよ。`mkfifo /tmp/mypipe`で作れるんだ。中にデータが保存されるわけじゃなくて、あくまでプロセス間をつなぐ筒なんだよ。

ひよこ ひよこ

どうやって使うの?

ペンギン先生 ペンギン先生

ターミナルAで`cat /tmp/mypipe`と打つと待機状態になって、ターミナルBで`echo hello > /tmp/mypipe`と打つとAに文字が届くんだ。データが流れ終わると両方のプロセスが完了するよ。

ひよこ ひよこ

面白いね!でも普通のファイルに書いてから読めばよくない?

ペンギン先生 ペンギン先生

ファイルだと書き終わってから読み始めるけど、名前付きパイプはストリームで流れるからリアルタイム性があるんだよ。ログをリアルタイムに別プロセスへ渡すときなんかに便利だね。

ひよこ ひよこ

Windowsでも使えるの?

ペンギン先生 ペンギン先生

Windowsにも名前付きパイプはあって、`\\.\pipe\名前`という形式で使うんだよ。仕組みはLinuxとは異なるけど、プロセス間通信に使われる点は同じだね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「名前付きパイプ」って出てきたら「ファイルっぽい見た目でプロセス同士がデータをやり取りする通路」と思えればだいたいOK!
📖 おまけ:英語の意味
「Named Pipe」 = 名前付きパイプ
💬 通常のパイプ(`|`)は名前がなく一時的に存在するだけだけど、Named Pipeはファイルシステム上に名前(パス)を持って永続するパイプという意味だよ
← 用語集にもどる