fork pipe stdout Windows

fork pipe stdout Windows

am 06.12.2006 13:45:19 von ronny.kluge

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;

____________________________________________________________ _______________

Re: fork pipe stdout Windows

am 06.12.2006 20:35:28 von Christian Winter

ronny.kluge@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

Re: fork pipe stdout Windows

am 07.12.2006 09:05:31 von ronny.kluge

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,=20

Danke, Gruß, Ronny ! :)