fstat64(1, . . . st_mode=S_IFIFO . . .) = 0;
####
fstat64(1, . . . st_mode=S_IFSOCK . . .) = 0;
####
use IPC::Open3;
use Symbol qw /gensym /;
use IO::File;
use IO::Select;
my $pid;
my ($in,$out,$err) = map gensym, 1..3;
eval {
$pid = open3($in,$out,$err,"/usr/bin/",("/home/me/infile"));
};
die "Bad error" if ($@);
my $sel = IO::Select->new();
$sel->add($out);
$sel->add($err);
while (my @ready = $sel->can_read(5)) {
for my $handle (@ready) {
my $buf;
if ($handle == $out) {
my $bytes = sysread($handle,$buf,1024);
if ($bytes == 0) {
$sel->remove($handle);
next;
}
$results .= $buf;
}
}
}
if (length($results) > 0) {
waitpid($pid);
}
else {
kill(9,$pid);
}