Prof. Franz Schweiggert Abteilung Angewandte Informationsverarbeitung 23. Mai 2006
Christian Ehrhardt Blatt 5


Uni Logo



Systemnahe Software (SS 2006)


Abgabetermin 30. Mai 2006

Signale (10 Punkte)

Ein Test vorweg (1 Punkt)

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:

Signalstatistik (2 Punkte)

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.

Ein Testprogramm (5 Punkte)

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?

Automatischer Vergleich (2 Punkte)

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