in reply to Re: Re: Re: fork system() STDOUT redirection on WindowsXP
in thread fork system() STDOUT redirection on WindowsXP

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

Replies are listed 'Best First'.
Re: Re: Re: Re: Re: fork system() STDOUT redirection on WindowsXP
by tilly (Archbishop) on Jun 26, 2003 at 06:58 UTC
    Aside from the obvious formatting problem, if someone can verify the behaviour change, it would be good to submit a report to p5p. (I can't be that someone - I don't have Windows.)

    At a guess this is a bad interaction between PerlIO and the fork() emulation that Perl does on Windows.

      Unfortunately, once you've sorted out the formatting you'll see that the "code" isn't a runnable program that anyone could use to test anything, just the op's idea of "all we need to know" which isn't very helpful.


      Examine what is said, not who speaks.
      "Efficiency is intelligent laziness." -David Dunham
      "When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller