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


[c]



Systemnahe Software (II)
im Sommersemester 2009



Abgabetermin: 17. Juni 2009

29 Exitstatus, die n-te (4 Punkte)

Schreiben Sie zur Wiederholung ein Programm exitstatusn.c, das eine Zahl aus der Standardeingabe liest und sich dann mit einem bestimmten Exitstatus beendet. Liegt die Zahl zwischen 0 und 250, soll dies der Exitstatus sein.

Die Werte 251 bis 255 sind für Fehlerbehandlung reserviert. Ist die Zahl negativ, soll der Exitstatus 251 sein. Ist die Zahl größer als 250, soll der Exitstatus 252 sein. Wird gar nichts eingegeben, soll sich exitstatusn.c mit dem Status 253 beenden. Wird eine zu grosse oder zu kleine Zahl eingegeben (also der Wertebereich eines long verlassen), ist der Exitstatus 254. Tritt ein anderer Fehler auf - z.B. falls gar keine Zahl eingegeben wurde - soll sich exitstatusn.c mit dem Status 255 beenden.

30 User-Zähler (14 Punkte)

Schreiben Sie ein Programm usercounter.c, welches die Anzahl der momentan eingeloggten Benutzer auf der Standardausgabe ausgibt. Damit dies allerdings auch eine Herausforderung darstellt, gibt es einige Auflagen hierzu.

Erstens sollen die eingeloggten User mit Hilfe des Kommandos who (ohne Argumente) ermittelt werden. Um daraus dann die Anzahl der User zu bekommen, muss die Anzahl der Zeilen in der Ausgabe von who gezählt werden. Dies geht am besten mit dem Kommando wc (finden Sie das passende Argument selbst). Die Ausgabe von wc wiederum soll von exitstatusn.c entgegengenommen werden. Die Anzahl der eingeloggten Benutzer wird nach Beendigung von exitstatusn.c anhand des Exitstatus von usercounter.c ausgewertet und ausgegeben.

Zweitens soll usercounter.c nicht einfach die Anzahl ausgeben, sondern zunächst alles einrichten und warten. Erst wenn der Benutzer Strg-C drückt (also dem Prozess SIGINT schickt), soll die Anzahl der Benutzer ausgegeben werden. Dies muss wiederholt möglich sein, das Beenden von usercounter.c soll nur dann gehen, wenn der Benutzer mehrfach schnell hintereinander - z.B. in unter einer Sekunde - Strg-C eingibt.

Hinweis: Für diese Aufgabe brauchen Sie vermutlich alles, was Sie bisher in der Vorlesung und den Übungen gelernt haben, einschließlich Pipes.

Noch ein Hinweis: Sie müssen bei jeder Abfrage der Benutzeranzahl mindestens 3 mal forken, und zwar je einmal für who, wc und exitstatusn.c.

Viel Erfolg!



Michael Mattes 2009-06-10