Prof. Dr. Franz Schweiggert Abteilung Angewandte
Informationsverarbeitung 28. Januar 2002
Christian Ehrhardt Blatt 12
Allgemeine Informatik 3 (WS 2001/2002)
Abgabetermin 5.Februar 2002
In diesem Blatt soll die Lösung von Blatt 11 dahingehend
erweitert werden, daß sich Personen, die sich im selben
Raum befinden, unterhalten können. Das soll folgendermaßen
ablaufen:
- Beim Programmstart wird ein Name für den Abenteurer
festgelegt. Dafür kann z.B. der Login Name verwendet
werden. Beachtet dann aber, daß sich nicht zwei
Abenteurer mit dem gleichen Namen im selben Irrgarten bewegen
dürfen.
- Eine Person, die sich in einem Raum befindet, wird durch
ein Unterverzeichnis beschrieben. Beim betreten eines
Raums muß dieses Unterverzeichnis angelegt werden, beim
Verlassen muß es wieder gelöscht werden. Denkt daran,
daß auch beim Programmende und beim Programmstart entsprechende
Aktionen notwendig sind. Der Name des Unterverzeichnisses
entspricht dem Namen des Abenteurers, der sich im Raum
befindet.
- Um eine Nachricht an einen anderen Abenteurer zu schicken
wird in dessen Unterverzeichnis eine Datei mit dem Namen
des Absenders angelegt. Der Inhalt der Datei ist die Nachricht.
- Sobald der Abenteurer feststellt, daß er eine Nachricht
bekommen hat, wird diese zusammen mit Ihrem Absender angezeigt.
Anschließend wird die Datei, die die Nachricht enthielt gelöscht.
Das heißt insbesondere, daß ein Abenteurer solange keine
weitere Nachricht an einen bestimmten anderen Abenteurer
schicken kann, bis dieser die Nachricht zur Kenntnis genommen hat.
- Ein Abenteurer kann einen Raum solange nicht verlassen, bis
alle Nachrichten angezeigt wurden.
- Es sollte zumindest nach jedem eingegebenen Kommando
überprüft werden, ob es neue Nachrichten gibt.
- Es soll ein neues Kommando ``say person message'' zum
versenden von Nachrichten hinzugefügt werden. Das erste Wort nach
say gibt die Person an, die eine Nachricht erhalten soll,
der Rest der Zeile ist die Nachricht selbst. Obwohl auf diese Weise
keine mehrzeiligen Nachrichten verschickt werden können, sollte
euer Programm in der Lage sein, mehrzeilige Nachrichten anzuzeigen.
- Das Kommando look soll so ergänzt werden, daß auch
alle anderen Personen, die sich im Raum befinden, angezeigt werden.
Verzeichnisse können mit dem System Call ``mkdir'' angelegt werden.
Leere Verzeichnisse können mit dem System Call ``rmdir''
gelöscht werden. Wenn ein Verzeichnis nicht leer ist, kann es nicht
gelöscht werden.
Auf der Homepage gibt es eine Headerdatei ``timeout.h'', die zwei
Funktionen bereitstellt:
- settimeout
- Diese Funktion beginnt einen timeout von 3 Sekunden.
Ein anschließender Aufruf von read, fgets, fscanf etc. wird
unterbrochen, sobald diese drei Sekunden um sind.
- cleartimeout
- Diese Funktion bricht einen vorher mit
settimeout gestarteten timeout ab. Das ist nützlich, wenn
der System Call, der unterbrochen werden sollte, ganz normal
zurückgekehrt ist.
Diese beiden Funktionen könnten möglicherweise nützlich sein,
um Nachrichten auch dann anzuzeigen, wenn gerade längere Zeit
kein Kommando eingegeben wurde.
Um das ganze ein wenig testen zu können gibt es einige
fiktive Personen, mit denen sich Euer Programm unterhalten
kann. Schaut euch dazu am besten die Homepage an.
Christian Ehrhardt
2002-01-28