Prof. Franz Schweiggert Abteilung Angewandte
Informationsverarbeitung 23. Mai 2006
Christian Ehrhardt Blatt 5
Systemnahe Software (SS 2006)
Abgabetermin 30. Mai 2006
Schreibt ein kleines Programm, das SIGINT (auch bekannt
als Ctrl-C) abfängt und testet, was passiert, wenn man mehrmals
Ctrl-C drückt.
Hinweise:
- Dieser Test sollte unbedingt (auch) auf unseren SUNs
gemacht werden und das Programm sollte auch nach
mehrmaligem Drücken von Ctrl-C nicht terminieren.
- Mit Ctrl-Z kann man das so gestartete Programm in den
Hintergrund schicken und anschließend mit dem Kommando
kill beenden.
Auf der Homepage der Vorlesung gibt es ein kleines Modul
bestehend aus writestat.c und writestat.h
herunterzuladen. Die darin implementierte Funktion
writestat bekommt einen Zeiger auf ein Array mit
MAXSIGS Integern übergeben und gibt dessen Inhalt
auf die Standardausgabe aus.
Schreibt ein Programm sigstat, das in einem solchen
Array zählt, wie oft welches Signal empfangen wurde. Beim
Eintreffen des ersten Ctrl-C Signals soll die Statistik
mit Hilfe von writestat ausgegeben und
das Programm beendet werden. Testet das Programm mit Hilfe des
Kommandos kill(1).
Hinweis: Für einige Signale kann kein Handler
installiert werden. Diese sollten wir uns für den nächsten
Teil der Aufgabe merken. Welche das sind ergibt sich durch
die Fehlerbehandlung.
Jetzt soll das im vorherigen Teil geschriebene Programm
sigstat getestet werden. Schreibt dazu ein Programm,
das sigstat aufruft und ihm 1000 zufällige Signale
schickt. Neben SIGINT, das ja zur Terminierung führt,
müssen auch noch einige andere Signale ausgenommen werden, für
die sigstat keinen Handler installieren kann. Der
Aufruf von sigstat sollte so erfolgen, daß dessen Ausgabe in
der Datei RECEIVED landet.
Zum Schluß wird der Kindprozeß mit Hilfe eines
SIGINT-Signals so beendet, daß er noch die Statistik
ausgibt. Der Vaterprozeß erstellt beim Senden der Signale
natürlich auch eine Statistik, die er mit Hilfe der
Funktion writestat in die Datei SENT schreibt.
Die beiden Dateien SENT und RECEIVED können jetzt mit Hilfe des
Kommandos diff(1) oder von Hand verglichen werden. Welche
Erklärung gibt es für die Unterschiede?
Ergänzt das Testprogramm so, daß es das Kommando
diff -u RECEIVED SENT zum Schluß so aufruft, daß die
Ausgabe auf dem Terminal, also auf der ursprünglichen
Standardausgabe erscheint.
Christian Ehrhardt
2006-05-23