in reply to Re^2: Can't get it working: Bidirectional Pipe on Windows
in thread Can't get it working: Bidirectional Pipe on Windows
No. Look at the definition of winopen2. It dups stdin and stdout to the socket pair prior to starting the child process, so it inherits the sockets as its stdin and stdout; it then restore the originals in the parent once the child is running:
sub winopen2 { my ($pid, $oldin, $oldout); my ($server, $client) = winsocketpair or return undef; open $oldin, '<&', \*STDIN or return (); open $oldout, '>&', \*STDOUT or return (); if (open (STDIN, '<&', $server) and open (STDOUT, '>&', $server)) { $pid = eval { system 1, @_ or die "system command failed: $!"}; # print STDERR "error: $@\n" if $@; } close STDOUT; open STDOUT, '>&', $oldout or carp "unable to reestablish STDOUT"; close STDIN; open STDIN, '<&', $oldin or carp "unable to reestablish STDIN"; #printf STDERR "pid %d, fileno %d, stdout %d, stdin %d\n", # $pid, fileno($client), fileno STDOUT, fileno STDIN; return ($pid and $pid > 0) ? ($pid, $client) : (); }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Can't get it working: Bidirectional Pipe on Windows
by rovf (Priest) on Mar 09, 2012 at 12:33 UTC |