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

I do not know what you mean. The script is the same, only the Perl version changed.
  • Comment on Re: Re: fork system() STDOUT redirection on WindowsXP

Replies are listed 'Best First'.
Re: Re: Re: fork system() STDOUT redirection on WindowsXP
by BrowserUk (Patriarch) on Jun 25, 2003 at 22:06 UTC

    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

        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.