fork pipe stdout Windows

Hallo zusammen,

in folgendem Programm Beispiel versuche ich im Kindprozess STDOUT in
die vorher erstellte Pipe umzuleiten, jedoch erhalte ich im
Parent-Prozess keine Nachricht. (& keinerlei Fehlermeldungen)

Ich habe für diese Verhalten absolut keine Lösung, fällt euch dazu
was ein ?

Gruß, Ronny.
____________________________________________________________ _______________

use POSIX qw(:sys_wait_h);

pipe (READ, WRITE);

if ($pid =3D fork)
{
# Parent

$SIG{CHLD} =3D sub {1 while (waitpid(-1, WNOHANG)) > 0 };
close WRITE;
}
else
{
die "FEHLER BEI AUSFUEHRUNG FORK: $!\n" unless defined $pid;

# Child

close READ;

open(STDOUT, ">&=3DWRITE") or die "Konnte STDOUT nicht umleiten: $!\n";

syswrite (STDOUT,"Nachricht vom Kind.") or "can not syswrite";

exit;
}

sysread (READ, $info, 100);

print "$info\n";

close READ;

____________________________________________________________ _______________
ronny.kluge [ Mi, 06 Dezember 2006 13:45 ] [ ID #1559510 ]

Re: fork pipe stdout Windows

ronny.kluge [at] barmenia.de schrieb:
> Hallo zusammen,
>
> in folgendem Programm Beispiel versuche ich im Kindprozess STDOUT in
> die vorher erstellte Pipe umzuleiten, jedoch erhalte ich im
> Parent-Prozess keine Nachricht. (& keinerlei Fehlermeldungen)
>
> Ich habe für diese Verhalten absolut keine Lösung, fällt euch dazu
> was ein ?
[program snipped]

STDOUT und STDERR müssen explizit geschlossen werden, bevor sie
neu geöffnet werden können (siehe "perldoc -f open"). Also einfach
ein "close STDOUT;" vor den open-Call setzen, dann klappt's.

Viele Grüße
-Christian
Christian Winter [ Mi, 06 Dezember 2006 20:35 ] [ ID #1559512 ]

Re: fork pipe stdout Windows

Christian Winter schrieb:
>
> STDOUT und STDERR müssen explizit geschlossen werden, bevor sie
> neu geöffnet werden können (siehe "perldoc -f open"). Also einfach
> ein "close STDOUT;" vor den open-Call setzen, dann klappt's.
>
> Viele Grüße
> -Christian

Das klappt super,

Danke, Gruß, Ronny ! :)
ronny.kluge [ Do, 07 Dezember 2006 09:05 ] [ ID #1560722 ]
Perl » de.comp.lang.perl.misc » fork pipe stdout Windows

Vorheriges Thema: Existenz eines Skalar prüfen
Nächstes Thema: Zeichensatzproblem?