私は次のことができることを知っています:
open(STDOUT, "|-", "cmd");
これはおそらく次の結果になります。
fork();
exec("cmd");
- 元のプロセスの STDOUT を新しいプロセスの STDIN にリンクします。
私がやりたいのは、上記のステップ 2 ですexec()
。現在のプロセスの 2 つのコピーを継続するだけで、子の STDIN が親の STDOUT にリンクされます。
これにより、次のように続行できます。
if (! $pid)
{
# Handle data in child here
open OUTFILE1 $file1;
open OUTFILE2 $file2;
my $i = 0;
while (<>)
{
print (i % 2 ? OUTFILE1 : OUTFILE2) "Line $i: $_";
++$i;
}
exit;
}
else
{
# Continue parent here
print STDOUT "Hello World from print()";
system("echo Hello World from system()");
}
上記のコードは、出力に行番号を追加し、このデータを行ごとに別のファイルに書き込む必要があります (少しばかげていることはわかっていますが、これは単なる例です)。
これを行う方法またはライブラリはありますか? 検討perltie
しましたが、 からの結果を処理していないようでしたsystem()
。そのため、実際に STDOUT をパイプするには別のプロセスが必要だと思います。