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.
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!