mkfifo - FIFO(名前付きパイプ)を作成する

スポンサーリンク

mkfifoコマンドは、FIFOという特別なファイルを作成するコマンドです。FIFOは、名前付きパイプとも呼ばれ、プロセス間通信(IPC,interprocess communication)の一つです。

また、Linuxコマンドでよく使われるパイプは、名前のないパイプであり、FIFOは名前のないパイプのように利用することができます。

スポンサーリンク

FIFOとは

FIFO(First In First out)とは、名前付きパイプと呼ばれます。
echo "hello" | catのように「|」の記号を用いて、パイプを使うと別のプロセスとデータのやり取りを行うことができます。しかし、この名前なしのプロセス間通信では、関係しているプロセスでしかデータのやり取りを行うことができません。
FIFOを用いるとecho "hello" > fifofileのようにFIFOに渡し、cat fifofileのように読み込むことで、関係しないプロセスでデータのやり取りを行うことができます。
FIFOは書き込み側のプロセスが複数存在する場合などに利用できます。

 

 

 

mkfifoの構文

mkfifoの構文

 

 

 

mkfifoの利用例

FIFOを作成
(オプションなし)

mkfifoコマンドは、FIFO(名前付きパイプ)を作成することができます。
作成したFIFOをlsコマンドの-lオプションで確認を行うとファイルタイプがpと表示されます。
また、lsコマンドの-Fオプションで確認を行うとファイル名の末尾に|が表示されます。

コマンド例

ls -lで確認

ls -Fで確認

 

 

 

作成するFIFOのパーミッションを設定
(-mオプション)

-mオプションを用いると作成するFIFOのパーミッションを設定することができます。
設定方法はchmodコマンドと同じように設定することができます。

コマンド例

ls -lで確認

 

 

 

FIFOを利用

FIFOへ書き込みと読み込み

mkfifoコマンドで作成されたFIFOへの書き込みや読み込みは書き込み側と読み込み側が両方開かれるまで応答を待つブロック(block)が発生します。
コマンド例の書き込み側と読み込み側は、別の端末を開いて実行しています。
別の端末を開く方法として、GUIでは単純に新しい端末を開いて実行できます。
CUIでは、tmuxをインストールして端末を分割したり、alt+F1~6(GUIではctrl+alt+F1~6)でそれぞれ別の端末に切り替えることができます。

コマンド例(読み込み)

応答待ち

コマンド例(書き込み)

実行結果(読み込み)

応答待ち終了

 

 

 

teeコマンドを用いて出力を2つに分割

FIFOとteeコマンドを用いることで、パイプする内容を2つに分割することができます。
ただし、コマンド例の最初の一行目は、teeコマンドが実行される時に応答待ちの状態になるので、バックグラウンド実行にしています。
コマンド例

実行結果

 

 

 

参考

外部リンクGnu Coreutils

外部リンクGnu Coreutils日本語版

外部リンクNamed Pipes (FIFOs - First In First Out)