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;
  # または、ここで子プロセスのコードを実行して、親プロセスに書き込む
}