16.10 関連プロセスの間で通信する
関連性のある2つのプロセスがあり、これらの間で通信を行う必要がある。ただし、open, system, およびバッククォートによって行える以上に厳密な制御を行いたい。
- pipeを使用してから、forkを使用する
my ($reader, $writer); pipe $reader, $writer; if (fork) { # 親プロセスのコードを実行して、読み取りまたは書き込みの一方だけを行う。 } else { # 子プロセスのコードを実行して、読み取りまたは書き込みの一方だけを行う。 }
- または、暗黙的にforkが行われる特別な形式でopenを使用する。
if ($pid = (open $child, "|-")) { # 親プロセスのコードを実行して、子プロセスに書き込む } else { die "cannot fork: $!" unless defined $pid; # または、ここで子プロセスのコードを実行して、親プロセスから読み取る }
- 反対方向の操作を行う
if ($pid = open ($child, "-|")) { # 親プロセスのコードを実行して、子プロセスから読み取る } else { die "Cannot fork: $!" unless defined $pid; # または、ここで子プロセスのコードを実行して、親プロセスに書き込む }