Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung I/O Multiplexing Alexander Sczyrba

Ähnliche Präsentationen


Präsentation zum Thema: "Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung I/O Multiplexing Alexander Sczyrba"—  Präsentation transkript:

1 Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung I/O Multiplexing Alexander Sczyrba Jan Krüger

2 Center for Biotechnology Bielefeld Bioinformatics Service Übersicht ● Unbuffered I/O ● Multiplexing mit select

3 Center for Biotechnology Bielefeld Bioinformatics Service Einleitung ● Problem: Wann schreiben? Wann lesen? ● Lösung der letzten Stunde: Entkopplung durch zwei Prozesse ● weitere Möglichkeit: Multiplexing ● zwei Verfahren: ● select: schreibe/lese nur dann, wenn möglich ● nonblocking I/O: Operationen blockieren nie

4 Center for Biotechnology Bielefeld Bioinformatics Service Input/Output ● unbuffered vs. buffered I/O ● print,,... : Lese-/Schreibpuffer ● ungepufferte low-level-Funktionen: sysread, syswrite ● nachfolgende Verfahren verwenden unbuffered I/O

5 Center for Biotechnology Bielefeld Bioinformatics Service sysread/syswrite ● lesen: ● my $buflen = 1024; my $buffer; my $size = sysread($socket, $buffer, $buflen); ● Liefert ”0“ bei end of file, undef bei Fehler ● schreiben: ● my $buffer = "hello world"; my $size = syswrite($socket, $buffer); ● schreibt eventuell nur Teil des Puffers ● IO::Handle: gleichnamige Methoden ● nicht mit buffered I/O mischen

6 Center for Biotechnology Bielefeld Bioinformatics Service Aufgaben ● Schreibe die simplen Varianten von Client und Server aus dem Übungsarchiv der letzten Stunde so um, daß sie via unbuffered I/O über die sockets kommunizieren. ● Worauf ist beim Server zu achten? Verwende die alternative Variante von syswrite: ● SIZE = syswrite(FILEHANDLE, SCALAR, LENGTH) ● Setze für LENGTH einen Wert von 6 Bytes ein.

7 Center for Biotechnology Bielefeld Bioinformatics Service Multiplexing mit select ● Idee: überwache file-/sockethandles ● teste, ob handle ausgelesen oder beschrieben werden kann ● OO-Interface: IO::Select ● my $select = IO::Select->new(); $select->add($socket); $select->add(\*FILE); ● $select->remove($socket); my $num = $select->count(); my $val = $select->exists(\*FILE2); = $select->handles();

8 Center for Biotechnology Bielefeld Bioinformatics Service IO::Select verwenden ● Zustand der handles abfragen: ● = $select->can_read(); = $select->can_write(); = $select->has_exception(); ● Rückgabewert: Array von handles ● blockieren, bis mind. ein handle schreib-/lesbar ist ● optionales Argument: timeout in Sekunden

9 Center for Biotechnology Bielefeld Bioinformatics Service can_read() ● handle kann gelesen werden, wenn... ● mindestens 1 Byte Daten vorhanden sind ● sysread() wird nicht blockieren ● oder EOF vorliegt ● sysread() wird ”0“ zurückliefern ● oder Fehler vorliegt ● sysread() wird undef zurückliefern

10 Center for Biotechnology Bielefeld Bioinformatics Service can_write() ● handle kann beschrieben werden, wenn... ● mindestens 1 Byte geschrieben werden kann ● syswrite() wird bei einem Byte nicht blockieren ● kann blockieren, falls mehr Daten geschrieben werden ● oder Fehler vorliegt ● sysread() wird undef zurückliefern

11 Center for Biotechnology Bielefeld Bioinformatics Service Aufgaben ● Schreibe einen nicht-forkenden Client, der Eingaben von der Tastatur an einen Server weitergibt und dessen Antworten auf dem Bildschirm ausgibt. Verwende IO::Select. ● Teste das Programm wieder mit dem Echo- und dem Whois-Server.


Herunterladen ppt "Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung I/O Multiplexing Alexander Sczyrba"

Ähnliche Präsentationen


Google-Anzeigen