Dr. Matthias Grabert Abteilung Angewandte
Informationsverarbeitung 24. Mai 2002
Christian Ehrhardt Blatt 5
Systemnahe Software (SS 2002)
Abgabetermin 4.6. 2002
Aschenputtel muß im gleichnamigen Märchen Erbsen sortieren,
die Guten ins Töpfchen, die Schlechten ins Kröpfchen. Da dies
eine sehr zeitaufwendige Arbeit ist, soll in diesem Blatt ein
kleines Programm geschrieben werden, das dir Arbeit von Aschenputtel
erleichtert. Aschenputtel wird dabei genauso wie das Töpfchen
für die guten Erbsen und das Kröpfchen für die schlechten
Erbsen durch Prozesse simuliert. Die Erbsen sind bestimmte Buchstaben.
Die Kommunikation zwischen den Prozessen (also zwischen Aschenputtel
und den dem Töpfchen bzw. Kröpfchen) erfolgt über pipes.
Der Aschenputtel-Prozeß stellt sicher, daß sich im aktuellen Verzeichnis
eine named pipe mit dem Namen ``pipe'' befindet und liest anschließend
von dieser pipe bis zum Dateiende Buchstaben (Erbsen) ein.
- Gute Erbsen, d.h. Buchstaben, die im Wort ``gut'' vorkommen werden
gefolgt von einem Zeilenumbruch an den Töpfchen-Prozeß übergeben.
- Schlechte Erbsen, d.h. Buchstaben, die im Wort ``schlecht'' und
nicht im Wort ``gut'' vorkommen werden (ohne anschließenden
Zeilenumbruch) an den Kröpfchen-Prozeß übergeben.
- Alle anderen Buchstaben und Zeichen können ignoriert werden.
Der Aschenputtel-Prozeß sollte darauf warten, daß sich seine
Kinder beenden bevor er sich selbst beendet.
Der Töpfchen-Prozeß wird vom Aschenputtel-Prozeß erzeugt und
bekommt die guten Erbsen über eine pipe. Der Prozeß selbst
soll eine kurze Meldung ausgeben, und dann das Kommando ``sort''
so ausführen, daß es von der Pipe für gute Erbsen liest.
Die Ausgabe von sort soll (natürlich ebenfalls mit Hilfe einer pipe)
an das Kommando ``uniq -c'' gehen. Die beiden Kommandos ``sort und
``uniq -c'' in dieser Kombination tun nichts anderes, als zu zählen,
wie oft jede Zeile in der Standardeingabe vorkommt. Man erhält also
eine Art Statistik, wieviele der guten Erbsen ``g''-Erbsen, ``u''-Erbsen
bzw. ``t''-Erbsen waren.
Der Kröpfchen-Prozeß soll lediglich zählen, wieviele schlechte
Erbsen bei ihm ankommen und das Ergebnis ausgeben.
Die Stiefmutter ist diejenige, die Aschenputtel die Erbsen zum
sortieren gibt, d.h. diejenige, die Buchstaben in die named pipe
schreibt. Diese ehrenvolle Aufgabe bleibt Euch überlassen und
kann zum Beispiel mit dem Kommando echo oder cat erledigt werden.
- Die Bibliotheksfunktion ``popen'' ist für die Lösung
dieses Blattes nicht erlaubt.
- Unter Solaris sind pipes bidirektional, unter Linux und vielen
anderen Unix-Derivaten dagegen nicht. Daher sollte man sich
auf dieses Feature von Solaris nicht verlassen und immer nur
den Deskriptor Nummer 0 zum lesen und den Deskriptor Nummer 1
zum schreiben verwenden.
- Das Ende einer Datei erkennt man beim Lesen mit read am
Rückgabewert 0. Wenn aus einer pipe gelesen wird, dann wird
dieser Wert nur dann zurückgeliefert, wenn niemand mehr
diese pipe zum schreiben geöffnet hat. Wenn die pipe nur
leer ist, blockiert read.
- Der Kröpfchen-Prozeß ist etwas einfacher, es empfiehlt sich
zunächst damit anzufangen.
Christian Ehrhardt
2002-05-24