如何在perl中通过fork打开文件? Perl迁移问题(5.6到5.8)

时间:2016-07-21 09:31:30

标签: perl fork

我们正在为我们的一个应用程序进行perl升级(5.6到5.8)。

在5.6中,我们使用下面的示例代码来实现多线程,

$connection->{output} = new IO::File;
my $pid = open ($connection->{output}, "-|");
        if (not defined $pid) {
                die qq("open fork failed: $!);
            } elsif ($pid != 0) {
               $connection->{pid} = $pid;
                next LOOP;
            } else {
               select(STDOUT);
               $| = 1;
               print "Something";
               POSIX::_exit(0);
}

但是在perl 5.8中,' - |'不受支持。所以我试图通过fork()做同样的事情。但是如何实现' - |'通过fork并使代码像5.6一样工作。

非常感谢任何帮助..

1 个答案:

答案 0 :(得分:1)

defined( my $pid = open ($connection->{output}, "-|") )
   or die($!);

if ($pid) {
   ...
} else {
   ...
}

类似于

pipe(my ($FROM_CHILD, $TO_PARENT))
   or die($!);

defined( my $pid = fork() )
   or die($!);

if ($pid) {
   close($TO_PARENT);
   ...
} else {
   close($FROM_CHILD);
   open(STDOUT, '<&', $TO_PARENT)
      or die($!);

   ...
}