3

別々の時間に実行される 2 つの部分で構成される Perl (Linux で実行) 内からプロセスのパイプラインをセットアップしたいと考えています。

例えば:

コンシューマ プロセスを開始します。

open( OUT, "| tar xvf - " ) || die "Failed: tar: $!";

その後、プロデューサー プロセスを開始します。

open( IN, "gpg -d $file |" ) || die "Failed: gpg: $!";

しかし、どうにかして gpg からの出力を tar への入力にリダイレクトします。

ループを構築することでこれを行うことができます:

while (<IN> ) {
  print OUT;
}

しかし、どうにかして 2 つのプロセスをリダイレクトで結び付けることができるかどうかを知りたいです。

4

3 に答える 3

11

追加

pipe( IN, OUT );

2 つのオープン ステートメントの前。それでおしまい!

もっと複雑なことをしたい場合は、 IPC::Run CPAN モジュールをお勧めします:

http://search.cpan.org/dist/IPC-Run/

プロセスを開始し、それらの入力と出力を結び付け、チェーンの任意のポイントでロギングまたはリダイレクトを追加できます。

于 2009-03-06T14:15:41.443 に答える
1

2 つのプロセスがまったく無関係である場合は、FIFO を使用します。

use POSIX qw(mkfifo);
mkfifo($path, 0700) or die "mkfifo $path failed: $!";

これにより、$path に FIFO が作成されます。ここで、1 つのプロセスがそのファイルに書き込み、もう 1 つのプロセスがそのファイルから読み取ります。

于 2009-03-06T14:17:38.367 に答える