|
sub handle_read { my $handle = shift; my $buffer = ""; if (defined(sysread($handle, $buffer, 8192))) { my $handler = $handler{$handle}; $handler->{ibuf} .= $buffer; if ($handler->{ibuf} =~ /^(.*\n)(.*)/s) { if ($1 =~ /^\r?\n$/) { &{$handler->{readline}}($handle, ""); } else { foreach my $line (split /\r?\n/, $1) { &{$handler->{readline}}($handle, $line); } } $handler->{ibuf} = $2; } } else { quit($handle); } } |
handle_read arbeitet mit sysread, das direkt auf
read(2) zurückgeht, um die internen
Eingabepuffer von Perl zu umgehen (select(2)
funktioniert dafür nicht).
| |
read(2) bietet ferner das Entgegenkommen, auch dann
weniger zurückzuliefern (nämlich genau das, was im
Betriebssystemskern zur Verfügung steht), wenn mehr gefordert
wird (hier: 8192 Bytes).
|
Copyright © 1996 - 2003 Andreas Borchert, in HTML konvertiert am 01.10.2003 |