Klasurlösungsvorschläge

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Klasurlösungsvorschläge
Hab mir bei einigen MC-Fragen richtig schwer getan und hab
mir gedacht, ich schaff mal eine Diskussionsvorlage:

http://www.heeen.de/wiki/index.php/Lösungsvorschläge_der_SoS1-Klausuren

Ich hoffe auf rege Beteiligung und Diskussionen…

mfg lusiux

Programmieraufgaben zu den Klausuren
Da ich keine Möglichkeit gefunden habe den Quellcode im Wiki darzustellen, ohne dass er unlesbar formatiert wird (auch brachte keine Abhilfe) dachte ich mir, man könnte ja die C Dateien hier im Forum hochladen und im Wiki lediglich einen externen Link darauf einfügen.

Ich mach hier mal den Anfang für die Aufgabe 2 der Klausur vom SS 2001

Attachment:
runtree.c: https://fsi.cs.fau.de/unb-attachments/post_41942/runtree.c


Lösung der Programmieraufgabe zur Klausur vom WS 2000/01

Für die Joblisten Verwaltung habe ich einfach mal die aus der Übung gegebene Bibliothek verwendet. Diese weicht etwas von der Aufgabenspezifikation ab.

Attachment:
fileserver.c: https://fsi.cs.fau.de/unb-attachments/post_41945/fileserver.c

Aufgabe 2 Klausur WS 2001/02
Und nun noch die Lösung zur Aufgabe 2 der Klausur WS 2001/02

Attachment:
time.c: https://fsi.cs.fau.de/unb-attachments/post_41976/time.c

Aufgabe 2 Klausur SS 2002
Dann noch die Lösung zur Aufgabe 2 der Klausur SS 2002

Attachment:
rlsd.c: https://fsi.cs.fau.de/unb-attachments/post_41985/rlsd.c


Und falls es noch jemand interessiert hier noch die Lösung zur Klausur Februar 2003. Ich find das ist n cooles Programm, und gar nicht so aufwändig zu implementieren (wie ich zunächst dachte).

Attachment:
batchd.c: https://fsi.cs.fau.de/unb-attachments/post_42032/batchd.c

Aufgabe 2 Klausur SS 2002
Mit write kann ich doch nicht auf einen Socketschrreiben. Dafür muss ich doch erst ein fdopen machen - oder hab ich was nicht gecheckt.


vom accept bekommt man einen Socket-deskriptor zurueck.
Auf dem kann man mit den Systemcalls read oder write direkt arbeiten.
(Ist das gleiche wie ein Filedeskriptor, den man aus open bekommt).

Mit fdopen kann man aus dem Socket-Deskriptor einen Stream (FILE * ) machen
(also das Gleiche wie das Ergebnis aus einem fopen)
und dann die Funktionen, die auf I/O-Streams arbeiten benutzen
(fprintf, fscanf, putc, gtetc, fwrite, fread, fgets, …)

Die Stream-Funktionen machen in auf Ebene 3 (in den Bibliotheksfunktionen) halt noch
etwas Vorverarbeitung und dann am Ende aber auch ein read oder write auf dem
dahinter verborgenen File-(oder Socket-)deskriptor.


Ah ok und send & recv waren speziell für sockets. (Man vergisst einfach zu viel im Urlaub :frowning: )
Aber ich hab doch nen Fehler gefunden (hoff ich zumindest - sonst fang ich an an mir zu zweifeln):
in der runtree.c sollte man in Zeile 181 ein exit; anhängen, weil der Sohnprozess sonst in der Hauptschleife landet.


Der Fehler in runcommand besteht tatsächlich. Hier fehlt ein exit.

Ich verwende read/write, weil ich es bisher nicht geschafft hab, dass das, was ich mit printf auf den mit fdopen bekommenen FILE-Stream ausgebe beim Empfänger ankommt. Auch ein fflush hat nichts gebracht. Keine Ahnung wo da das Problem liegt.


Warum mit fdopen rumärgern wenn es auch sprintf gibt :wink:


Die Klausur vom Juli 2003 hab ich noch mal gemacht. Allerdings funktioniert das Umleiten von stdin, … nach exec, das heißt wenn das Kommando ausgeführt wird nicht mehr. Im Falle, dass exec fehlschlägt kommt die Fehlermeldung jedenfalls beim Client an.

Attachment:
rshd.c: https://fsi.cs.fau.de/unb-attachments/post_42049/rshd.c


Und dann noch die Lösung zur SOS Klausur vom März 2005

Attachment:
fileattrd.c: https://fsi.cs.fau.de/unb-attachments/post_42061/fileattrd.c