Prozesse Pipes

Prozesse Pipes

am 07.11.2006 16:10:59 von ronny.kluge

Hallo zusammen,

mit folgendem Programm erstelle ich 2 Prozesse, welche über
bidirektionale Pipes Informationen
austauschen. Info geht vom Parent zum Child und wieder zurück zum
Parent.
Jedoch funktioniert dies nicht. Das Programm läuft Fehlerfrei ab,
jedoch erhalte ich im Parent-Prozess keine Ausgabe der Informationen.
Habt Ihr eine Idee wo der Fehler ist !?

Danke, Gruß, Ronny.

____________________________________________________________ ________________

use Socket;

socketpair(CHILD,PARENT,AF_UNIX,SOCK_STREAM,PF_UNSPEC) or die "$!";

if (fork == 0)
{
close CHILD;
select PARENT;
$| =3D 1;
chomp($line =3D );
print PARENT "INFO 2 - $line\n";
close PARENT;
exit(0);
}
else
{
close PARENT;
select CHILD;
$| =3D 1;
print CHILD "INFO1\n";
chomp($line =3D );
print "INFO3 - $line\n";
close CHILD;
}

Re: Prozesse Pipes

am 07.11.2006 20:09:37 von Paul Hink

ronny.kluge@barmenia.de wrote:

> Das Programm läuft Fehlerfrei ab, jedoch erhalte ich im
> Parent-Prozess keine Ausgabe der Informationen.

> [...]

> select CHILD;
> $| = 1;
> print CHILD "INFO1\n";
> chomp($line = );
> print "INFO3 - $line\n";

Auch der letzte print-Aufruf (von dem du wohl o.g. Output erwartest)
schreibt wegen des vorangegangenen select nach CHILD statt nach STDOUT.
Also entweder vor besagtem print noch ein "select STDOUT" einbauen oder
per "print STDOUT" explizit nach STDOUT schreiben.

Paul