in reply to fork system() STDOUT redirection on WindowsXP

Do you have a small testcase that demonstrates the difference you describe between 5.6.1 and 5.8?


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


  • Comment on Re: fork system() STDOUT redirection on WindowsXP

Replies are listed 'Best First'.
Re: Re: fork system() STDOUT redirection on WindowsXP
by dave_usa (Novice) on Jun 25, 2003 at 21:58 UTC
    I do not know what you mean. The script is the same, only the Perl version changed.

      I was asking you to post a 'cut-down-to-the-bare-essentials-to-demonstrate-the-problem' version of your script. Trying to debug code based a verbal description of it is like trying to diagnose car trouble from "It makes a sort of cluck-clunk-weeee sound and then stalls":)

      It sounds from your description that this is probably a small part of a large script. If you reduce it to something that just demonstrates the failure, it would save anyone trying to help you from having to invent there own test script based upon guesses of what you might be doing.


      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


        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