if (!open(COPY,'>',$copyfile)) #open the file for writting before we s
+tart reading from it
{
$cf_status = 0;
open(COPY,'>&STDOUT');
};
my $pid;
if ($pid = fork)
{
redirect_to_file(); #redirect output to the COPY file
.
.
.
open( OLDOUT, ">&STDOUT" ) or ...;
open( OLDERR, ">&STDERR" ) or ...;
# redirect everything to a capture file; fail if it already exists
if ( !sysopen( STDOUT, $outFile, O_WRONLY|O_EXCL|O_CREAT ) ) { ... }
open( STDERR, ">& STDOUT" ) or ...;
select(STDERR); $| = 1; # make unbuffered
select(STDOUT); $| = 1;
binmode( STDOUT ); # don't interpret CRLF/Unicode
binmode( STDERR );
system('command');
open( STDOUT, ">&OLDOUT" ) or ...;
open( STDERR, ">&OLDERR" ) or ...;
close( OLDOUT ) or ...;
close( OLDERR ) or ...;
end_redirection();
waitpid($pid,0); # wait for child process to finish reading and to e
+xit
}
else
{
die "cannot fork: $!" unless defined $pid;
.
. #reads from COPY file
.
}
edited: Thu Jun 26 15:10:13 2003
by jeffa - code tags
|