在Perl中的exec之后将数据从子节点传递给父节点

时间:2013-03-13 06:04:54

标签: perl ipc

我想在另一个perl程序child.pl中调用perl程序parent.pl,并希望将数据从child.pl传递到parent.pl并通过{{打印这些数据1}}。 parent.pl可能不起作用,因为在system("perl child.pl")完成之前,parent.pl将不会执行任何操作。我看了the online doc of perlipc,似乎child.plpipe()可以满足我的一些需求,但我找不到在fork()之后将数据从子进程传递到父进程的方法。这是exec的代码:

parent.pl

1 个答案:

答案 0 :(得分:7)

这可能会有所帮助:

#!/usr/bin/perl
open (my $child, "-|","./child.pl") or die("$!");
while (<$child>) {
  print "P: $_";
}
close($child);

打开功能,from perldoc

  

对于三个或更多参数,如果MODE为| - ,则文件名为   解释为输出管道的命令,如果是MODE   是 - | ,文件名被解释为管道输出的命令   我们。

如果您不想触摸标准输出,那么您需要孩子的合作,然后您可以使用命名管道:

<强> parent.pl

#!/usr/bin/perl
use strict;
use warnings;
use Fcntl;
use POSIX;
my $fpath = '.named.pipe';

mkfifo($fpath, 0666) or die "mknod $!";
system("perl child.pl &");
sysopen(my $fifo, $fpath, O_RDONLY) or die "sysopen: $!";

while (<$fifo>) {
  print "P: $_";
}
close($fifo);
unlink($fifo);

<强> child.pl

#!/usr/bin/perl
use strict;
use warnings;
use Fcntl;
use POSIX;

my $fpath = '.named.pipe';
sysopen(my $fifo, $fpath, O_WRONLY) or die "sysopen: $!";
print "screen hello\n";
print $fifo "parent hello\n";
close($fifo);