概要
`mkfifo`は、ファイルシステムに特殊ファイルである名前付きパイプを作成します。このパイプは、2つ以上の独立したプロセスがデータを送受信できる通信チャネルとして機能します。一方のプロセスがパイプにデータを書き込むと、もう一方のプロセスがパイプからデータを読み取ることができ、データは先入れ先出し(FIFO)方式で処理されます。
主な特徴
- ファイルシステム上に存在し、パスでアクセス可能
- 独立したプロセス間の通信チャネルを提供
- データは先入れ先出し(FIFO)方式で処理
- シェルスクリプトで複雑なパイプラインを構築するのに便利
主なオプション
`mkfifo`コマンドは主にファイルパスを引数として使用し、いくつかの基本的なオプションをサポートしています。
作成オプション
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`mkfifo` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
使用例
`mkfifo`を使用して名前付きパイプを作成し、それを通じてプロセス間通信を行う方法を示します。
基本的な名前付きパイプの作成
mkfifo my_pipe
現在のディレクトリに`my_pipe`という名前のパイプを作成します。
特定のパーミッションでパイプを作成
mkfifo -m 600 my_private_pipe
所有者のみが読み書きできる`my_private_pipe`を作成します。
名前付きパイプを使用したデータ転送
mkfifo data_channel
echo "Hello from Terminal 1!" > data_channel &
cat < data_channel
一方のターミナルでデータを書き込み、もう一方のターミナルで読み取る例です。 **ターミナル 1:** `mkfifo data_channel` `echo "Hello from Terminal 1!" > data_channel` **ターミナル 2:** `cat < data_channel`
バックグラウンドプロセスとパイプの使用
mkfifo background_output
(ls -l; sleep 2; echo "Done listing") > background_output &
cat < background_output
バックグラウンドで実行されるプロセスの出力をパイプを通じて別のコマンドに渡します。
ヒントと注意点
名前付きパイプを使用する際の注意点と活用ヒントです。
パイプの削除
名前付きパイプは通常のファイルのように`rm`コマンドで削除できます。使用後は不要なパイプを整理することをお勧めします。
- `rm my_pipe`
ブロッキング(Blocking)動作
名前付きパイプはデフォルトでブロッキング方式で動作します。つまり、一方からの書き込み(または読み込み)試行は、もう一方からの読み込み(または書き込み)が開始されるまでその操作を待機させます。この動作を回避するには、`cat < my_pipe &`のようにバックグラウンドで実行するか、`O_NONBLOCK`フラグを使用してノンブロッキングモードで開く必要があります。
一時ファイルシステムの使用
一時的に使用するパイプは、`/tmp`ディレクトリや`mktemp`コマンドを活用して一意の名前を持つパイプを作成することをお勧めします。これにより、名前の衝突を防ぎ、システムの再起動時に自動的にクリーンアップされるようになります。