perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 34
Click for quality!




11.02.2012 / 13:16

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragVerständnisfrage: pipe() und select
Seitenanfang
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

Beitragre: Verständnisfrage: pipe() und select
Seitenanfang

my $old_handle = select(SCHREIB_HANDLE);

macht SCHREIB_HANDLE zum neuen Standard-Dateihandle fuer Ausgaben und speichert das alte Dateihandle in $old_handle zwischen.


print "Ausgabe auf alten Dateihandle\n";

my $old_fh = select(NEW_FH); # neues FH setzen, altes in $old_fh sichern

print "Ausgabe auf neuen Dateihandle\n";

select($old_fh); # auf altes FH zuruecksetzen

print "Ausgabe auf alten Dateihandle\n";

in $old_fh steht dann in der Regel STDOUT, da es das Standard-Dateihandle fuer Ausgaben ist

perldoc -f select

Datum: 28.05.2006-13:03

-






-
-