• Navigation überspringen
  • Zur Navigation
  • Zum Seitenende
Organisationsmenü öffnen Organisationsmenü schließen
Lehrstuhl für Informatik 4 & 16
  • FAUZur zentralen FAU Website
  1. Friedrich-Alexander-Universität
  2. Technische Fakultät
  3. Department Informatik
  • English
  • Campo
  • UnivIS
  • Stellenangebote
  • Lageplan
  • Hilfe im Notfall
  1. Friedrich-Alexander-Universität
  2. Technische Fakultät
  3. Department Informatik

Lehrstuhl für Informatik 4 & 16

Menu Menu schließen
  • Lehrstuhl
    • Leitbild
    • Team
    • Kontakt und Anfahrt
    • 50-jähriges Jubiläum
    Portal Lehrstuhl
  • Forschung
    • Forschungsbereiche
      • Betriebssysteme
      • Echtzeitsysteme
      • Energiebewusste Systeme
      • Verteilte Systeme
    • Projekte
      • BFT2Chain
      • e.LARN
      • NEON
      • PAVE
      • PRIMaTE
      • REFIT
      • ResPECT
      • SURESOFT
      • TRR 89 C1: iRTSS
      • TRR 89 C5
      • Watwa
    • Projektkampagnen
      • DOSS
      • maRE
    • Forschungsgruppen
      • ergoo
    Portal Forschung
  • Publikationen
  • Lehre
    • Wintersemester 2022/23
      • Ausgewählte Kapitel der Systemsoftware
      • Betriebssysteme
      • Middleware – Cloud Computing
      • Systemnahe Programmierung in C (für Wiederholer)
      • Systemprogrammierung 1 (für Wiederholer)
      • Systemprogrammierung 2
      • Verlässliche Echtzeitsysteme
      • Virtuelle Maschinen
      • Web-basierte Systeme
    • Sommersemester 2023
      • Ausgewählte Kapitel der Systemsoftware
      • Betriebssystemtechnik
      • Echtzeitsysteme
      • Projekt angewandte Systemsoftwaretechnik
      • Systemnahe Programmierung in C
      • Systemprogrammierung 1
      • Verteilte Systeme
    Portal Lehre
  • Examensarbeiten
  1. Startseite
  2. Lehre
  3. Sommersemester 2022
  4. Systemprogrammierung 2 (Wiederholerübungen)
  5. Übung

Übung

Bereichsnavigation: Lehre
  • Systemprogrammierung 2 (Wiederholerübungen)
    • Vorlesung
      • # Folien
      • # Literatur
      • # UnivIS-Auszug
    • Übung
      • # Folien
      • # Aufgaben
      • # Literatur
      • # Übungstermine
      • # Korrekturhinweise
    • Semesterplan
      • FAQ
        • Kontakt
          • Prüfungsinformationen
            • Alte Klausuren
              • Evaluation
                • Intern

                Übung

                SP2 Übung

                Aktuelles

                • 2. Klausureinsicht: Dienstag, 25.10.2022 16:00 im I4 Besprechungsraum (0.035)

                • 1. Klausureinsicht: Donnerstag, 11.08.2022 10:00 in Raum 0.031, Martensstr. 1
                • Klausur: Dienstag, 02.08.2022 13:00 in der Ballspielhalle
                • Fragestunde zur Klausur: Montag, 01.08.2022 10:00 im H4
                • Beginn der Anmeldung zum Übungsbetrieb: Montag, 25.04.2022 08:00 via Waffel

                  Hinweis: Gruppenaufgaben können nur mit Partnern bearbeitet werden, die die selbe Tafelübung besuchen.

                Allgemeines

                Der Übungsbetrieb umfasst Tafel- und Rechnerübungen. Jeder Student sollte eine Tafelübung besuchen, zu der eine Anmeldung erforderlich ist. Die Rechnerübungstermine können ohne vorherige Anmeldung je nach Bedarf besucht werden. Die Tafelübungen dienen der Vermittlung von Theoriewissen, welches zur Lösung der Übungsaufgaben erforderlich ist. Um an diesem Übungsbetrieb teilnehmen zu können, müssen sich alle Teilnehmer auf folgenden Plattformen anmelden:

                • Anmeldung im Waffel (Anmeldung ab Montag, 25.4. um 8:00)
                • Anmeldung im StudOn

                Hinweis: Zu Beginn der Tafelübungen können ein oder auch mehrere Teilnehmer zur Vorstellung ihrer gelösten Übungsaufgabe aufgefordert werden. Nichtanwesenheit oder nicht hinreichende Erklärung der Aufgabe führt hierbei zur Bewertung der Aufgabe mit 0 Punkten.

                In den Rechnerübungen sind die Arbeitsplätze des Rechnerraums für SP-Studenten reserviert. In diesen Übungen sollen die Aufgaben bearbeitet werden, wobei in der Regel ein Betreuer zur Verfügung stehen wird um bei Bedarf Hilfestellung zu geben.

                Zur Information

                • UNIX-Einführung der FSI-Informatik

                Folien der Tafelübung

                All slides are copyrighted (C) 2011-2021 by Wolfgang Schröder-Preikschat and Jürgen Kleinöder, University of Erlangen-Nürnberg, Germany. Use without prior written permission of the authors is not permitted!

                Übung 1: Netzwerkkommunikation, Sockets, POSIX-I/O vs. C-I/O, Aufgabe 1 (02.05 - 06.05.2022)

                • Foliensatz

                Videos

                • Orga
                • IPC Grundlagen
                • IPC Schnittstelle
                • Ein- und Ausgabe
                • Beispiele

                Übung 2: Netzwerkkommunikation, UNIX-Signale, Aufgabe 2 (16.05 - 20.05.2022)

                • Foliensatz

                Videos

                • IPC-Schnittstelle Server
                • UNIX-Signale
                • Signale-API von UNIX
                • Zombies
                • Makefile
                • sister
                • Beispiel

                Besprechung 1: Besprechung Aufgabe 1 (23.05 - 27.05.2022)

                • Keine Materialien hinterlegt

                Übung 3: UNIX-Signale, Nebenläufigkeit, Duplizieren von Dateideskriptoren, Aufgabe 3 (30.05 - 03.06.2022)

                • Foliensatz

                Videos

                • Nebenläufigkeit durch Signale
                • Nebenläufiger Zugriff auf Variablen
                • Passives Warten auf ein Signal
                • Mehr Details zu UNIX-Signalen
                • Umleiten von Dateien
                • Gelerntes anwenden

                Besprechung 2: Besprechung Aufgabe 2 (Mi., 08.06 - 10.06.2022)

                • Keine Materialien hinterlegt

                Übung 4: Thread-Synchronisation, Bibliotheken, Aufgabe 4 (13.06 - 17.06.2022)

                • Foliensatz

                Videos

                • Mutexe und Bedingungsvariablen
                • Nichtblockierende Synchronisation
                • Module und Symbole
                • Statische Bibliotheken
                • Dynamische Bibliotheken
                • jbuffer

                Besprechung 3: Besprechung Aufgabe 3 (20.06 - 24.06.2022)

                • Keine Materialien hinterlegt

                Übung 5: Ringpuffer, Semaphore, Zusammenfassung, Aufgabe 5 (27.06 - 01.07.2022)

                • Foliensatz

                Videos

                • Thread-Pool
                • Zusammenführung von BS-Konzepten
                • mother

                Besprechung 4: Besprechung Aufgabe 4, Klausurvorbereitung (04.07 - 08.07.2022)

                • Foliensatz

                Übung K: Klausurvorbereitung (11.07 - 29.07.2022)

                • Klausur
                • Man-Pages

                Besprechung 5: Besprechung von Aufgabe 5, Evaluierung, Klausurvorbereitung (18.07 - 22.07.2022)

                • Keine Materialien hinterlegt

                Anfertigung, Abgabe und Bewertung der Übungsaufgaben

                Soweit in der Aufgabenstellung nicht abweichend beschrieben, sollen alle abgegebenen Programme portabel zur SUSv4/POSIX.1-2008-Systemschnittstelle sein und im Sprachumfang dem C-Standard ISO C11 entsprechen. Alle Programme müssen mit folgenden Compileroptionen übersetzen:

                -std=c11 -pedantic -Wall -Werror -D_XOPEN_SOURCE=700

                Die Abgabe erfolgt über die Rechnern im CIP-Pool mit dem Skript /proj/i4sp2/bin/submit und muss vor dem Abgabetermin erfolgen. Dies kann über das Internet geschehen, sodass die Anwesenheit im CIP-Raum nicht notwendig ist. Eine Abgabe per E-Mail oder USB-Stick ist grundsätzlich nicht möglich.

                Zur Bearbeitung der Aufgaben wird Ihnen automatisch ein Projektverzeichnis angelegt, nachdem Sie sich zu einer Übung angemeldet haben. Der Pfad zu diesem Verzeichnis lautet /proj/i4sp2/LOGIN, wobei LOGIN für Ihren Benutzernamen im CIP-Pool steht. Bitte bearbeiten Sie Ihre Aufgaben in diesem Verzeichnis und verwalten Sie das Verzeichnis wie in der ersten Aufgabenstellung beschrieben, da ansonsten das Abgabesystem Ihre Lösung nicht finden kann.

                Die abgegebenen Aufgaben werden von uns korrigiert und bewertet. Die Ergebnisse der Korrektur sind nach Login im Waffel einsehbar und können zusätzlich über das SVN abgerufen werden.

                Übungsaufgaben

                Die Übungsaufgaben für das komplette Semester stehen grob fest. Allerdings können sich bis zum Ausgabezeitpunkt noch Details an den Aufgaben ändern.

                Die verlinkten Aufgabenstellungen mit einem „Entwurf“-Wasserzeichen im Hintergrund stellen lediglich eine Orientierungshilfe dar. Die endgültigen Aufgabenstellungen werden spätestens am Ausgabetag verlinkt.

                Auch die Hinweise zur Aufgabe auf dem Aufgabenblatt können Teile der einzuhaltenden Spezifikation enthalten und sind somit explizit als Teil der Aufgabenstellung zu verstehen.
                Alle Aufgaben werden den Korrekturhinweisen entsprechend bewertet.

                Nr. Titel Kurzbeschreibung Ausgabe Bearbeitungszeit
                (Werktage)
                2er-Gruppen Abzugebende Dateien Zusatzinfos
                1 snail Socket-Kommunikation (Client) Montag, 02.05.2022 11 Nein snail.c, Makefile
                2 sister Socket-Kommunikation (Server), Signale, Makefile Montag, 16.05.2022 10 Ja sister.c, connection-fork.c, request-http.c, Makefile API-Dokumentation
                3 rush POSIX-Signale, Filedeskriptoren, Nebenläufigkeit Montag, 30.05.2022 10 Ja Makefile, rush.c API-Dokumentation
                4 jbuffer Semaphore, nicht-blockierende Synchronisation, Bibliotheken Montag, 13.06.2022 11 Nein jbuffer.c, sem.c, Makefile API-Dokumentation
                5 mother Socket-Kommunikation (Server), POSIX-Threads, Verzeichnisse, Prozesse, Signale Montag, 27.06.2022 11 Ja connection-mt.c, request-httpx.c API-Dokumentation

                Literaturempfehlungen

                Einführung in die Programmiersprache C

                • Stephen Kochan: Programming in C. Sams Publishing, 3rd Edition, 2005.
                • Karlheinz Zeiner: Programmieren lernen mit C. Carl Hanser, 4. Auflage, 2000.
                • Steve Oualline: Practical C Programming. O’Reilly, 1991.
                • Peter Darnell, Philip Margolis: C: A Software Engineering Approach. Springer, 1991.
                • Brian Kernighan, Dennis Ritchie: The C Programming Language. Prentice Hall, 1988 (in der deutschen Übersetzung 1990 bei Hanser erschienen)

                UNIX-Systemprogrammierung

                • A. S. Tanenbaum, A. S. Woodhull: Operating Systems: Design And Implementation, Prentice Hall, 1997.
                • R. W. Stevens: Advanced Programming in the UNIX Environment. Addison-Wesley, 1992.

                Übersicht aller angebotenen Tafel- und Rechnerübungen

                Tafelübungen

                Übungen zu Systemprogrammierung 2 (Ü SP2(A))

                Verantwortliche
                Luis Gerhorst, M. Sc., Jonas Rabenstein, M. Sc., Dr.-Ing. Jürgen Kleinöder
                Angaben
                Übung
                Online/Präsenz
                2 SWS, Sprache Deutsch, Zu den Tafelübungen stehen Videosequenzen zur Verfügung, die zur Vorbereitung der Bearbeitung der Aufgaben dienen und die vor den jeweiligen Tafelübungsterminen gehört werden sollen. In den Tafelübungsterminen werden diese Inhalte vertieft, Fragen dazu diskutiert und die bearbeiteten Aufgaben nachbesprochen. Neben den Präsenzterminen stehen auch reine online-Termine für Studierende, die nicht an den Präsenzterminen teilnehmen können, zur Verfügung.
                Studienfächer / Studienrichtungen
                WPF MT-BA ab 5
                PF CE-BA-G 3
                PF INF-BA 3
                PF IuK-BA 3
                PF WINF-BA 3
                WPF MT-MA-BDV ab 1

                Kurse

                      
                Mo   08:15 - 09:45   02.133-113
                Kurs T10 Stefan S., erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mo   08:15 - 09:45   01.255-128
                Kurs TSP, erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mo   08:15 - 09:45   0.031-113
                Kurs T08 Kilian B., erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mo   10:15 - 11:45   0.031-113
                Kurs T01 Felix W., erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mo   10:15 - 11:45   00.151-113
                Kurs T03 Felix H., erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mo   10:15 - 11:45   01.255-128
                Kurs TSP, erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Di   8:15 - 9:45   00.152-113
                Kurs TSP, erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Di   10:15 - 11:45   0.031-113
                Kurs T07 Jürgen K., erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Di   10:15 - 11:45   00.151-113
                Kurs TSP, erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Di   10:15 - 11:45   Übung 3 / 01.252-128
                Kurs TSP, erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Di   12:15 - 13:45   0.031-113
                Kurs TSP, erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mi   08:15 - 09:45   01.151-128
                Kurs TSP, erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mi   08:15 - 09:45   0.031-113
                Kurs T09 Johannes W., erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mi   08:15 - 09:45   02.133-113
                Kurs TSP, erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mi   16:15 - 17:45   0.031-113
                Kurs TSP, erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Do   8:15 - 9:45   0.031-113
                Kurs T02: Milan S., erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Do   8:15 - 9:45   02.134-113
                Kurs TSP, erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Do   12:15 - 13:45   0.031-113
                Kurs T05 Milan S., erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Do   12:15 - 13:45   02.133-113
                Kurs T04 Philip K., erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Do   12:15 - 13:45   Übung 3 / 01.252-128
                Kurs T06 Johannes W., erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Fr   8:15 - 9:45   00.152-113
                Kurs TSP, erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein
                      
                Fr   14:15 - 15:45   00.151-113
                Kurs TSP, erwartete Teilnehmer: 13
                Dustin Nguyen
                Jonas Rabenstein

                Rechnerübungen

                Rechnerübungen zu Systemprogrammierung 1 und 2 (RÜ SP)

                Verantwortliche
                Luis Gerhorst, M. Sc., Jonas Rabenstein, M. Sc.
                Angaben
                Übung
                Online/Präsenz
                2 SWS
                Frühstudium, Sprache Deutsch, Die Rechnerübungen werden sowohl in Form von Präsenzterminen im CIP-Pool der Informatik, als auch - für Studierende, die die Präsenztermine nicht wahrnehmen können - in Form von online-Terminen angeboten.
                Studienfächer / Studienrichtungen
                PF CE-BA-G 3
                PF INF-BA 3
                PF IuK-BA 3
                PF WINF-BA 3
                WPF MT-BA ab 5

                Kurse

                      
                Mo   12:15 - 13:45   Zoom-Meeting
                Kurs R01 (Jonas R., Johannes W.,), https://i4sp.informatik.uni-erlangen.de/rechneruebung/
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mo   12:15 - 13:45   01.155-113 CIP
                Kurs RSP (unbetreut)
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mo   14:15 - 15:45   01.155-113 CIP
                Kurs RSP (unbetreut)
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mo   16:15 - 17:45   01.155-113 CIP
                Kurs RSP (unbetreut)
                Dustin Nguyen
                Jonas Rabenstein
                      
                Di   10:15 - 11:45   01.155-113 CIP
                Kurs R02 (Felix H., Stefan S.)
                Dustin Nguyen
                Jonas Rabenstein
                      
                Di   16:15 - 17:45   01.155-113 CIP
                Kurs RSP (unbetreut)
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mi   12:15 - 13:45   01.155-113 CIP
                Kurs R03 (Milan S., Felix W.)
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mi   14:15 - 15:45   01.155-113 CIP
                Kurs R04 (Milan S., Johannes W.)
                Dustin Nguyen
                Jonas Rabenstein
                      
                Mi   16:15 - 17:45   01.155-113 CIP
                Kurs RSP (unbetreut)
                Dustin Nguyen
                Jonas Rabenstein
                      
                Do   10:15 - 11:45   01.155-113 CIP
                Kurs RSP (unbetreut)
                Dustin Nguyen
                Jonas Rabenstein
                      
                Do   12:15 - 13:45   01.155-113 CIP
                Kurs R05 (Kilian B., Philip K.)
                Dustin Nguyen
                Jonas Rabenstein
                      
                Do   14:15 - 15:45   01.155-113 CIP
                Kurs RSP (unbetreut)
                Dustin Nguyen
                Jonas Rabenstein
                      
                Do   16:15 - 17:45   01.155-113 CIP
                Kurs RSP (unbetreut)
                Dustin Nguyen
                Jonas Rabenstein
                      
                Fr   10:15 - 11:45   01.155-113 CIP
                Kurs RSP (unbetreut)
                Dustin Nguyen
                Jonas Rabenstein
                      
                Fr   14:15 - 15:45   01.155-113 CIP
                Kurs RSP (unbetreut)
                Dustin Nguyen
                Jonas Rabenstein

                Korrekturhinweise

                Die in den Aufgaben beschriebenen Anforderungen müssen durch das Programm erfüllt sein, damit Bonuspunkte gesammelt werden können. Dazu gehört auch, dass alle angeforderten Ressourcen beim erfolgreichen Beenden des Programms wieder freigegeben werden; im Fehlerfall müssen keine Ressourcen freigegeben werden. Für jeden Fehler in der Implementierung werden Punkte von der maximal erreichbaren Punktzahl abgezogen.

                Jede Datei (C-Datei oder Makefile) gilt als eigenes Modul. Punkte werden in dem Modul abgezogen, wo laut Aufgabenstellung die Funktionalität zu erwarten ist. Jedes Modul wird mit mindestens Null Punkten bewertet. Die maximalen Punkte pro Modul stehen in der Aufgabenstellung.

                Die folgenden Korrekturrichtlinien zeigen wofür und in welchem Ausmaß Punkte bei Fehlern abgezogen werden. Sie sind als Richtlinien zu verstehen und nicht vollständig. In Ausnahmen kann davon abgewichen werden. Falls nicht weiter spezifiziert wird für jedes Auftreten eines Fehlers die genannten Punkte abgezogen, auch mehrfach für denselben Fehler an unterschiedlichen Stellen im Programm. Tritt derselbe Fehler mehr als zweimal auf, so gibt es ab dem dritten Auftreten keinen Punktabzug mehr und er wird als Folgefehler gewertet.

                Eine gekürzte Variante der Korrekturhinweise steht als Cheatsheet zum Drucken zur Verfügung.

                Makefile

                Fehlerbild
                Punktabzug
                Anmerkung
                .PHONY fehlt oder unvollständig
                0,5
                Ausnahme: halde, dort optional da noch nicht eingeführt
                all (oder Entsprechung) ist nicht erstes Target
                0,5
                Ausnahme: halde, dort optional da noch nicht eingeführt
                Abhängigkeit(en) fehlen
                0,5
                pro Target
                Auf der Webseite geforderte Compilerflags fehlen
                0,5
                pro Compileraufruf
                CFLAGS oder CC werden nicht genutzt, obwohl in der Aufgabenstellung gefordert
                0,5
                pro Variable

                Übersetzerfehler

                Wenn sich ein Programm nicht übersetzen lässt werden vom jeweiligen Modul Punkte abgezogen. Für jeden Auslöser von Übersetzerfehlern werden Punkte abgezogen. Dies betrifft auch vom Übersetzer ausgelöste Warnungen, da mit -Werror kompiliert wird.

                Fehlerbild
                Punktabzug
                Auslöser eines Übersetzerfehlers
                3

                Falsche oder unzureichende Fehlerbehandlung

                Nutzung von C- und POSIX-Funktionen erfordern korrekte Fehlerbehandlung. Mögliche Fehler sind in der man-Page der betreffenden Funktion nachzulesen. Alle Funktionen benötigen Fehlerbehandlung, außer die Funktion kann nicht fehlschlagen. Ob eine Funktion fehlschlagen kann, richtet sich nach der POSIX Spezifikation (man 3p funktion). Für jede falsche oder nicht ausreichende Fehlerbehandlung werden Punkte abgezogen. Typische Bestandteile einer Fehlerbehandlung sind:

                Nötige Fehlerbehandlung
                Punktabzug
                Prüfen auf Fehler
                0,5
                falls errno zur Fehlerprüfung genutzt wird, obwohl laut Man-Page nicht vorgesehen
                0,5
                Ausgabe des Fehlergrunds mit perror(3) (Funktion setzt errno) oder fprintf(3) (sonst) (*); keine Fehlerausgabe bei selbst geschriebenen Bibliotheksfunktionen (z.B. der halde)!
                0,5
                Behandlung des Fehlers: exit(3) oder return (**); kein exit bei selbst geschriebenen Bibliotheksfunktionen!
                0,5

                Insgesamt wird für eine normale Fehlerbehandlung (Ausnahmen siehe unten) maximal 1 Punkt abgezogen, dies gilt auch wenn die Fehlerbehandlung komplett fehlt.

                Falls die Fehlerbehandlung das Programm beendet, müssen keine Ressourcen (angeforderter Speicher, offene Dateien, etc.) freigegeben werden.

                Ausnahmen und Ergänzungen

                Fehlerbild
                Punktabzug
                Anmerkung
                Fehlerbehandlung zu malloc(3) fehlt
                0,5
                Fehlerausgabe auf stdout
                0,5
                einmalig pro Abgabe

                Manche Funktionen benötigen aufwändigere Fehlerbehandlung, bei der das Prüfen auf einen Fehler komplizierter ist. Somit kann mehr als ein Punkt abgezogen werden. Der maximale Punktabzug pro Funktion ergibt sich aus der Summe der hier aufgezählten möglichen Fehler. Dieser wird auch verwendet, wenn die Fehlerbehandlung komplett fehlt.

                • strtol(3)
                  Nötige Fehlerbehandlung
                  Punktabzug
                  errno passend setzen sowie nach Aufruf prüfen
                  0,5
                  endptr prüfen (Eingabe nicht leer und wurde vollständig gelesen)
                  0,5
                  Ausgabe und Behandlung wie oben (*) und (**)
                  1
                • fgets(3)
                  Nötige Fehlerbehandlung
                  Punktabzug
                  Rückgabewert prüfen
                  0,5
                  Mit feof(3) bzw. ferror(3) auf Fehler prüfen
                  0,5
                  Ausgabe und Behandlung wie oben (*) und (**)
                  1
                • fgetc(3)
                  Nötige Fehlerbehandlung
                  Punktabzug
                  Rückgabewerte EOF und 0xFF können unterschieden werden
                  1
                  Prüfen des Rückgabewerts auf EOF
                  0,5
                  Mit feof(3) bzw. ferror(3) auf Fehler prüfen
                  0,5
                  Ausgabe und Behandlung wie oben (*) und (**)
                  1
                • sysconf(3)
                  Nötige Fehlerbehandlung
                  Punktabzug
                  Rückgabewert prüfen
                  0,5
                  Falls die angeforderte Information ein (Min-/Max-)Limit ist, passend errno setzen und prüfen
                  0,5
                  Ausgabe und Behandlung wie oben (*) und (**)
                  1
                • readdir(3)
                  Nötige Fehlerbehandlung
                  Punktabzug
                  Rückgabewert prüfen
                  0,5
                  errno passend vor jedem Aufruf setzen sowie nach Aufruf im Fehlerfall prüfen
                  0,5
                  Ausgabe und Behandlung wie oben (*) und (**)
                  1
                • getcwd(3)
                  Nötige Fehlerbehandlung
                  Punktabzug
                  Rückgabewert prüfen
                  0,5
                  errno im Fehlerfall prüfen
                  0,5
                  Falls errno gleich ERANGE, ohne Abbruch Fehlergrund beseitigen und erneut aufrufen
                  1
                  Ausgabe und Behandlung wie oben (*) und (**)
                  1
                • getaddrinfo(3)
                  Nötige Fehlerbehandlung
                  Punktabzug
                  Rückgabewert prüfen
                  0,5
                  Ausgabe des Fehlergrunds mit perror(3) (bei Rückgabe von EAI_SYSTEM) oder gai_strerror(3) (sonst)
                  1
                  Behandlung bei Fehler wie oben (**)
                  0,5

                Fehlerbehandlung bei Ein-/Ausgabe

                Ein-/Ausgabe benötigt Fehlerbehandlung um beispielsweise Fehler beim Schreiben auf eine volle Festplatte zu erkennen und damit Datenverlust zu verhindern. Fehlerbehandlung ist für alle Funktionen nötig, die Ein-/Ausgabe durchführen die zur Grundfunktionalität des Programms gehören (geht aus der Aufgabe hervor). Das beinhaltet beispielsweise printf(3), fclose(3) oder close(2). Ausgenommen davon sind dabei die Fehlermeldungen selbst sowie unwichtige Ausgaben. Falls sich das Programm bei einem Schreibfehler sowieso mit einem Fehlercode beenden würde (bspw. SIGPIPE) so ist keine Fehlerbehandlung nötig.

                Damit auch Schreibfehler auf stdout erkannt werden (wichtig falls in eine Datei umgeleitet wird), muss vor Beendigung des Programms stdout mit fflush(3) geflushed werden. Dies ist nur nötig, falls das Programm Ausgaben auf stdout nutzt.

                Verbotene Funktionen

                Folgende Funktionen ermöglichen keine korrekte Fehlerbehandlung und dürfen nicht verwendet werden. Als Punktabzug ergibt sich jeweils der maximale Punktabzug der korrekten Alternative.

                Verbotene Funktion
                Alternative
                Punktabzug
                atoi(3)
                strtol(3)
                siehe oben bei strtol(3)

                Programmierfehler

                Fehlerbild
                Punktabzug
                static fehlt
                0,5
                Unnötige globale Variable
                0,5
                free(3) fehlt
                1
                close(2) oder fclose(3) fehlt
                1
                printf(variable), kein Format-String und variable vom Nutzer
                1
                zu kleiner Puffer
                1
                Verlust von benötigter Information durch Casten von Datentypen
                1
                falsche Funktionsparameter
                0,5
                errno wird vor perror(3) überschrieben (z.B. durch Funktionsaufruf)
                0,5
                sonstige Programmierfehler (Folgefehler nur für dieselben Programmierfehler)
                1

                Programmierstil (Fehler)

                Fehlerbild
                Punktabzug
                Unnötig (deutlich zu) große Puffer
                0,5
                goto, falls offensichtlich unnötig oder um Schleifen nachzubauen (Sprung nach oben)
                1
                Ausgabe in Bibliotheksfunktionen (z.B. bei der halde)
                0,5
                exit(3) in Bibliotheksfunktionen (z.B. bei der halde); abort(3) ist erlaubt wenn es die Angabe vorsieht
                1
                offensichtlich schlechter Code (von Folgefehlern ausgenommen)
                1

                Programmierstil (Hinweise)

                Fehlerbild
                Verbesserte Lösung
                if (var) { free(var); }
                free(var);
                if (ptr == 0) { ... }
                if (ptr == NULL) { ... }
                (*ptr).member
                ptr->member
                Friedrich-Alexander-Universität
                Erlangen-Nürnberg

                Schlossplatz 4
                91054 Erlangen
                • Impressum
                • Datenschutz
                • Barrierefreiheit
                Nach oben