名前付きパイプを試してみる

Unix/Linux には 名前付きパイプというものがあります。

Unixドメインソケットの説明で「名前付きパイプに類似した機能を備え〜」と書いてあって 今まで何となく「パイプに名前付けらるんだな」くらいにと思ってましたが 実際に使ったことがなかったので、試してみます。

使用するのは mkfifo というコマンド。

$ mkfifo /tmp/namedpipe

これで作成完了。

$ ls -l /tmp/namedpipe

prw-rw-r-- 1 xxxxx xxxxx 0 Oct 22 22:06 /tmp/namedpipe

なんかできてますし 権限の先頭が "p" になってます。

機能はなんとなく想像できますね。

動作を確認するために、 まず別のコンソールで この名前付きパイプを tail します。

$ tail -f /tmp/namedpipe

待機状態になりました。

tail しているコンソールとは別のコンソールで 名前付きパイプに向かってリダイレクトしてみます。

$ echo test1 > /tmp/namedpipe
$ echo test2 > /tmp/namedpipe

tail しているコンソール側に 出力されていきます。

$ tail -f /tmp/namedpipe

test1
test2

なるほど、直接つながっていなくても 名前付きパイプを通してデータが連携できてますね。

rm コマンドで削除できます。

$ rm /tmp/namedpipe

ここまでだと、ほぼ通常のファイルを使っても同じようなことができますが 受け側で tail していない状態でリダイレクトすると 通常のファイルとは違う動きになりました。

$ echo test3 > /tmp/namedpipe

受け側が 名前付きパイプを tail していないとこの状態で リダイレクトすると リダイレクトした側が待機状態になります。

受け側で 名前付きパイプに tail や cat などすると リダイレクト側の待機が解除されます。

$ cat /tmp/namedpipe

test3

便利に使えるケースはありそうですね。

Google サイト内検索

Amazonアソシエイト