Thread "open() und sysopen()" /? (14 answers)
Opened by BlackExe at 2007-08-05 00:48

sid burn
 2007-08-05 03:03
#97534 #97534
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
topeg+2007-08-05 00:01:22--
Es gibt die vordefinierte Variable "$|", die sämtliche Puffer für alle geöffneten Filehandles (Ein/Ausgabestreams) abschaltet.

Nein, das ist Falsch!!!

Wenn du $| auf True setzt, dann wird nur der aktuelle Aktive Filehandle ungebuffert gesetzt, und nicht sämtliche Buffer. Weiterhin wird mit $| nur die Ausgabe auf ungepuffert gesetzt, und nicht die Eingabe!

Wenn du die eingabe ungepuffert haben möchtest, musst du meistens spezielle ungepufferte Funktionen nutzen. Zum Beispiel mit "sysread()" von einem Filehandle lesen, anstatt "<$fh>" etc.

Wenn du z.B. einem Filehandle auf ungebuffert setzen möchtest, dann musst du zuerst mit select() den Filehandle setzen, die rückgabe Speichern, $| auf true setzen. Und wieder zurück zum alten Filehandle wechseln. z.B. so:

Code (perl): (dl )
1
2
3
my $oldfh = select( $filehandle );
$| = 1;
select( $oldfh );


das ist ziemlich unpraktisch. Daher empfehle ich IO::Handle. Das hat eine Methode um ein spezielles Filehandle auf unbuffered zu stellen. und das select() gedönse da oben fällt weg.

Code (perl): (dl )
1
2
3
4
5
use IO::Handle;

my $fh, '>', $filename  or  die $!;
$fh->autoflush( 1 );
....
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread "open() und sysopen()" /?