Hallo,
ich lerne gerade ein bisschen Perl und versuche seit längerem, ein Codebeispiel von Selfhtml zum Befehl pipe() zu verstehen:
use strict;
$| = 1;
pipe(LESE_HANDLE, SCHREIB_HANDLE);
my $Kind_pid = fork();if ($Kind_pid) {
close(LESE_HANDLE);
my $old_handle = select(SCHREIB_HANDLE);
$| = 1;
for (my $i=1;$i<=5;$i++) {
sleep(1);
print SCHREIB_HANDLE "$i (gesendet vom Elternprozess)\n";
}
close(SCHREIB_HANDLE);
wait;
select($old_handle);
}
else {
close(SCHREIB_HANDLE);
my $Speicher;
while(defined($Speicher = <LESE_HANDLE>)) {
print "Empfangen: $Speicher \n";
}
exit(0);
Das Prinzip von pipe() hab ich im Grunde verstanden, es geht darum, dem geforkten Kindprozess Informationen vom Elternprozess zukommen zu lassen. Allerdings kapiere ich im Source die Zuordnung von select zu einer Skalarvariable nicht:
my $old_handle = select(SCHREIB_HANDLE);
und später der Aufruf:
select($old_handle);
Wie soll das denn interpoliert lauten?
Selfhtml schreibt dazu:
"Um die Pufferung der Daten abschalten zu können, muss im if-Zweig außerdem mit "select" das Schreib-Handle ausgewählt werden."
Aber warum reicht hier nicht ein einfaches
select (SCHREIB_HANDLE);
?
Gruss -
Mark
Datum: 26.05.2006-17:14
