use POSIX qw(sys_wait_h); use strict; ... if ($cdrpid = open(CDREC, "|-")) { if ($isopid = open(MKISO, "-|")) { my ($rin, $nfd) = ("",""); vec($rin, fileno(CDREC), 1) = 1; if (not($nfd = select($rin, $rin, undef, 20))) { die "argh timeout"; } while () { print CDREC; } close(MKISO); } else { exec "$OPT{isobin}", '-r', @ARGV; } close(CDREC); } else { exec "$OPT{cdbin}", "speed=$OPT{speed}", dev=$OPT{dev}", "tsize=@tsize", '-waiti', '-data', '-'; } waitpid($isopid, &WNOHANG); waitpid($cdrpid, &WNOHANG);