Prof. Dr. Franz Schweiggert Institut für Angewandte Informationsverarbeitung 17. Juni 2009
Michael Mattes Blatt 8


[c]



Systemnahe Software (II)
im Sommersemester 2009



Abgabetermin: 24. Juni 2009

Hinweis zur Klausurteilnahme an alle Bachelor-Hörer: Falls Sie in einem Bachelorstudiengang eingeschrieben sind, dies aber nicht so im SLC steht (links oben über dem Abmelden-Knopf), melden Sie sich bitte schnellstmöglich per Mail beim Übungsleiter! Bitte Name, Matrikelnummer und genauen Studiengang angeben.

31 Message Queues (8 Punkte)

Message Queues sind ein weiterer Mechanismus zur Interprozess-Kommunikation (IPC) unter Unix. Ein Handout beschreibt kurz die Verwendung von Message Queues.

Schreiben Sie ein Programm msgqueue.c, welches eine zufällige Anzahl an Kindprozessen - zwischen 10 und 20 Stück - erzeugt. Diese Prozesse sollen dann für eine zufällig gewählte Zeitspanne zwischen 1 und 20 Sekunden schlafen.

Nach dem Aufwachen sollen die Kindprozesse dem Elternprozess über eine Message Queue den Zeitpunkt des Aufwachens übermitteln. Der Elternprozess soll daraus die Zeitspanne errechnen, die der jeweilige Kindprozess geschlafen hat und diese dann mit Angabe der PID des Kindes ausgeben.

32 Dateizugriffszähler mit Named Pipes (6 Punkte)

In Unix gibt es für einen normalen Anwender keine einfache Möglichkeit, die Anzahl der Zugriffe (von anderen Benutzern) auf eine bestimmte Datei zu ermitteln. Mit einem kleinen Trick ist dies jedoch bei eigenen Dateien möglich. Angenommen, Sie haben eine Datei Lieblingsfilme.txt für die Öffentlichkeit zugänglich gemacht und möchten die Zugriffe darauf zählen. Dann können Sie die Datei beispielsweise in Lieblingsfilme-echt.txt umbenennen und eine Named Pipe namens Lieblingsfilme.txt anlegen. Danach schreiben Sie ein Programm, welches immer wieder einen Kindprozess erzeugt, der auf diese Named Pipe exklusiv schreibend zugreift, den Inhalt der echten Datei hineinschreibt und sich dann beendet. Der Hauptprozess wartet auf das Kind und inkrementiert nach jedem Prozessende einen Zähler.

Implementieren Sie dieses Szenario im einem Programm accesscount.c. Als Kommandozeilenargumente soll das Programm zuerst den Namen der echten Datei und danach den Namen der Pipe erhalten. Falls die Pipe nicht existiert, muss sie erzeugt werden. Jedesmal, wenn auf die Pipe zugegriffen wird, soll accesscount.c den aktuellen Zählerstand auf der Standardausgabe ausgeben.

Viel Erfolg!



Michael Mattes 2009-06-17