Fragen zur Fehlerbehandlung in Klausuren

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.

Fragen zur Fehlerbehandlung in Klausuren
Hallo,

mir ist bei einigen Aspekten noch nicht ganz klar, wie man dort in der Klausur bei der Fehlerbehandlung agieren soll.

Allgemein: Ist das Abstürzen des Programmes mittels die erlaubt oder nicht? Hier existieren widersprüchliche Aussagen; manchmal ist es in den Klausuren explizit erlaubt, wann anders wieder verboten (-> dann ist es klar). Wie ist es aber im allgemeinen Fall? Soweit ich es mitbekommen habe, darf man das, es sei denn, es handelt sich um einen Server, der nicht abstürzen soll, oder um Bibliotheksfunktionen.

Wenn ein Fehler aufgetreten ist, muss man danach folgende Funktionen nicht mehr fehlerbehandeln. Bsp: Wenn [m]fgetc[/m] fehlschlägt, muss man das nachfolgende [m]fclose[/m] nicht mehr fehlerbehandeln (zumindest laut Übung). Gilt das auch für [m]fputs[/m]-Aufrufe, welche eine Fehlermeldung an einen Client signalisieren (siehe insbesondere die Klausur https://www4.cs.fau.de/Lehre/WS15/V_SP2/Pruefung/2015w-SP-Klausur-www.pdf die Methode [m]handleCommand[/m] → hier ist aber eh die Frage, ob man [m]printf[/m] etc. fehlerbehandeln muss, siehe unten).

Ist die Ausgabe mittels [m]perror[/m] immer erlaubt, notwendig oder sogar verboten? In einigen Klausuren muss man Methoden implementieren, die im normalen Fall 0 und im Fehlerfall -1 zurückgeben. Was gilt hier?
(Außerdem speziell zur Klausur https://www4.cs.fau.de/Lehre/WS14/V_SP2/Pruefung/2014w-SP-Klausur-www.pdf: Hier steht bei der Methode [m]show[/m], dass im Fehlerfall -1 zurückgegeben werden muss, aber trotzdem versucht werden sollte, das Verzeichnis möglichst lange abzusuchen. Wenn spricht man von einem Fehlerfall? Nur wenn z. B. [m]opendir[/m] fehlschlägt oder sobald irgendein Fehler auftritt, der aber nicht zur Beendigung der Funktion führt.)

Zur maximalen Zeilenlänge: Wenn eine maximale Zeilelänge von z. B. 1024 Zeichen eingegeben ist, wie ist zu verfahren, wenn eine längere Zeile eingelesen wird: Darf man das ignorieren oder darf man einfach sterben oder muss man das aufwendig fehlerbehandeln (also insbesondere den Rest der Zeile auslesen mittels [m]fgetc[/m] auslesen, wenn weitere Zeilen folgen)? Wann darf man außerdem davon ausgehen, dass das Terminator-Symbol ([m]‘\0’[/m]) in Anfragen/Textdateien/etc. vorkommt und wann nicht?

In älteren Klausuren wurde für Clientverbindungen oft [m]fopen(blub, “r+”)[/m] (zumindest laut Lösungsversuchen, und die Funktionsargumente haben das so implizit), d. h. ein Filepointer sowohl fürs Lesen als auch für das Schreiben verwendet. Inzwischen nutzt man aber zwei [m]FILE[/m]-Pointer, einen fürs Schreiben und einen fürs Lesen. Kann man davon ausgehen, dass man das auch hier so macht?

Letztes Semester musste man anscheinend [m]printf[/m] etc. nicht fehlerbehandeln (Link: https://fsi.cs.fau.de/forum/thread/17608-Fehlerbehandlungen-in-der-Klausur). Gilt es auch für dieses Semester?

LG Gabriel

// Edit: Noch ne Sache, die mir eingefallen ist: Wenn eine Anfragezeile, z. B. “BLUB 1234”, dasteht, ist der Command auch gültig, wenn mehrere Leerzeichen dazwischen sind, z. B. “BLUB 1234” (dann könnte man ja strtok/strtok_r verwenden).

// Edit2: Darf man eigentlich [m]readdir[/m] in mehrfädigen Programmen verwenden?


zu EDIT 2: wenn der dir pointer auf unterschiedliche Verzeichnisse zeigt, darfst du readdir in threads verwenden, nur wenn du auf dem gleichen dir-pointer liest, dann wirds kritisch (haha), da die Struktur intern wiederverwendet wird beim nächsten Aufruf und somit verändert wird, dann steht evtl. nichtmehr das drin was du dir wünscht