Prof. Franz Schweiggert Abteilung Angewandte
Informationsverarbeitung 27. Juni 2006
Christian Ehrhardt Blatt 9
Systemnahe Software (SS 2006)
Abgabetermin 4.Juli 2006
Named Pipes (auch FIFOs genannt) sind wie der Name schon sagt etwas
sehr ähnliches
wie die bekannten Pipes. Der wesentliche Unterschied ist, daß
Named Pipes einen Eintrag im Dateisystem haben, den man mit dem Kommando
mkfifo(1) erstellen kann. Dadurch ist es
jeder Zeit möglich mit Hilfe von open(2) an eines der Enden
der Pipe zu kommen. Daher müssen Prozesse, die über Named Pipes
kommunizieren wollen, nicht mehr verwandt sein, wie bei den bekannten
(unnamed) Pipes. Beim Lesen und Schreiben verhalten sich Named Pipes
genau so, wie wir das von Pipes gewohnt sind. Eine kleine Neuerung
gibt es allerdings beim Öffnen: Ein Öffnen zum Lesen während (noch)
niemand die Pipe zum schreiben geöffnet hat blockiert, bis jemand die
Pipe zum Schreiben öffnet. Umgekehrt blockiert auch ein Öffnen zum
Schreiben, solange niemand die Datei zum Lesen geöffnet hat.
Modifiziert jetzt den MasterMind-Server und den MasterMind-Client
aus dem letzten Blatt so, daß sie über zwei Named Pipes kommunizieren.
Dazu soll zunächst der Server gestartet werden. Anschließend kann
dann der Client Kontakt zum Server aufnehmen.
Hinweis:Named Pipes funktionieren nur dann, wenn beide
beteiligten Prozesse auf dem selben Rechner laufen.
Modifiziert jetzt den MasterMind-Server so, daß er analog zum
Timeserver im Skript über eine Netzwerkverbindung zu erreichen ist.
Es genügt vorerst, wenn der Server eine einzige ankommende Verbindung
abhandelt und anschließend terminiert. Wenn alles klappt, sollte
es möglich sein, den MasterMind-Server mit Hilfe des
telnet(1)-Kommandos zu erreichen. Dazu gibt man telnet
den Rechnernamen und die verwendete Portnummer als
Kommandozeilenargumente an. (Das Kommando telnet kümmert
sich selbst um eine Konvertierung der Zeilenenden, ein künstlich
erzeugtes r auf der Kommandozeile ist also nicht mehr notwendig.
- Beim ersten Teil werden zwei Named Pipes benötigt, da bei beiden
das Öffnen blockieren kann, muß die Reihenfolge in der die beiden
Pipes geöffnet werden zwischen Client und Server abgestimmt werden.
- Für dieses Blatt genügt es in beiden Fällen, wenn der Server
eine einzelne Verbindung abhandeln kann und dann terminiert.
- Da der MasterMind-Server im Moment von der Standardeingabe liest
und auf die Standardausgabe schreibt, kann Eure Lösung auch zunächst
die Verbindung zum Client herstellen und erst dann den
MasterMind-Server mit exec geeignet ausführen. In diesem Fall
müssen am Code des Servers selbst keine Änderungen gemacht werden.
Christian Ehrhardt
2006-06-27