Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik

Allgemeines

Der Übungsbetrieb umfasst Tafel- und Rechnerübungen. Jeder Student sollte eine Tafelübung besuchen, zu der eine Anmeldung via waffel 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.

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

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

Folien der Tafelübungennach oben ▲

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!

KurzbeschreibungÜbungswochePDF
U1Lernziele, Organisatorisches, Subversion, Dynamische SpeicherverwaltungDo., 02.05 – Mi., 08.05.2019Teil 1, Teil 2
U2Teamarbeit, Fehlerbehandlung, generisches SortierenDo., 09.05 – Mi., 15.05.2019pdf, Pipes aus dem FSI-Vorkurs
U3B1Besprechung Aufgabe 1 (lilo), Zeigerarithmetik, Untypisierter und typisierter Speicher, make(1)20.05 – 24.05.2019pdf, (A5), (A6)
B2Besprechung Aufgabe 2 (wsort)27.05 – 31.05.2019
U4Speicherlayout, UNIX-Prozesse03.06 – 07.06.2019pdf, (A5), (A6)
B3Besprechung Aufgabe 3 (halde)Mi., 12.06 – Di., 18.06.2019pdf, (A5), (A6)
U5POSIX-Threads, Koordinierung mit SemaphorenFr., 21.06 – Do., 27.06.2019pdf, (A5), (A6)
B4Besprechung Aufgabe 4 (clash)Fr., 28.06 – Do., 04.07.2019
U6Dateisystem, Dateiattribute, Dateisystem-APIFr., 05.07 – Do., 11.07.2019pdf, (A5), (A6)
B5Besprechung Aufgabe 5 (mach) + Klausurvorbereitung15.07 – 19.07.2019Klausur, Man-Pages
B6Besprechung Aufgabe 6 (creeper) + Klausurvorbereitung22.07 – 26.07.2019

Anfertigung, Abgabe und Bewertung der Übungsaufgabennach oben ▲

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 an den Rechnern im CIP-Pool mit dem Skript /proj/i4sp1/bin/submit und muss vor dem Abgabetermin erfolgen. 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/i4sp1/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 ausgedruckt und korrigiert. Die korrigierten Ausdrucke werden in den Tafelübungen ausgehändigt. Die Ergebnisse der Korrektur sind außerdem nach Login im Waffel einsehbar.

Übungsaufgabennach oben ▲

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.

Nr. Titel Kurzbeschreibung Ausgabe Bearbeitungszeit
(Werktage)
2er-Gruppen Abzugebende Dateien Zusatzinfos
1 lilo Aufgabe zum Warmwerden Donnerstag, 02.05.2019 6 Nein lilo.c
2 wsort Sortierprogramm ähnlich sort(1) Donnerstag, 09.05.2019 7 Ja wsort.c
3 halde Einfache dynamische Freispeicherverwaltung Montag, 20.05.2019 10 Ja halde.c, Makefile, test.c
4 clash Kleine Shell mit Vorder- und Hintergrundprozessen Montag, 03.06.2019 9 Ja clash.c, plist.c, Makefile plist API
5 mach Threads, Semaphore Freitag, 21.06.2019 11 Nein mach.c, queue.c, machfile
6 creeper Verzeichnisse, Rekursion Freitag, 05.07.2019 7 Ja Makefile, creeper.c

Literaturempfehlungennach oben ▲

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übungennach oben ▲

T01Zahn, JohannesMo 08:15 - 09:450.031-113
T02Baecker, RubenMo 10:15 - 11:450.031-113
T03Windsheimer, FelixMo 14:15 - 15:4500.152-113
T04Perst, TimurMo 16:15 - 17:450.031-113
T05Dengler, EvaDi 08:15 - 09:450.031-113
T06Nguyen, DustinDi 08:15 - 09:4501.255-128
T07Knauer, LouDi 08:15 - 09:4500.152-113
T08Preis, JulianDi 12:15 - 13:450.85
T09Hanika, FelixDi 12:15 - 13:4501.151-128
T10Kleinöder, JürgenDi 12:15 - 13:45E 1.11
T11Stephan, MilanDi 14:15 - 15:450.031-113
T12Schöninger, StefanMi 08:15 - 09:450.031-113
T13Bender, KilianMi 10:15 - 11:450.031-113
T14Feiler, AnnaMi 12:15 - 13:4502.133-113
T15Schleier, TobiasMi 14:15 - 15:450.031-113
T16Güthlein, FlorianMi 14:15 - 15:4501.151-128
T17Bergmann, PaulMi 16:15 - 17:4501.151-128
T18Friedrich, KayDo 08:15 - 09:4500.152-113
T19Feiler, AnnaDo 10:15 - 11:4501.151-128
T20Schreiner, JonasDo 10:15 - 11:450.031-113
T21Braun, LukasDo 12:15 - 13:4502.134-113
T22Ruderich, SimonDo 14:15 - 15:450.031-113
T23Weidner, JohannesFr 08:15 - 09:450.031-113
T24Brandner, JulianFr 16:15 - 17:450.031-113

Übersicht aller angebotenen Rechnerübungennach oben ▲

Mo Di Mi Do Fr
08:00
09:00
10:00
10:15 - 11:45
RÜ SP
(Ruderich)
01.155-113
10:15 - 11:45
RÜ SP
(Ruderich)
01.155-113
10:15 - 11:45
RÜ SP
(Ruderich)
01.155-113
11:00
12:00
12:15 - 13:45
RÜ SP
(Ruderich)
01.155-113
12:15 - 13:45
RÜ SP
(Ruderich)
01.155-113
12:15 - 13:45
RÜ SP
(Ruderich)
01.155-113
12:15 - 13:45
RÜ SP
(Ruderich)
01.155-113
12:15 - 13:45
RÜ SP
(Ruderich)
01.155-113
13:00
14:00
14:15 - 15:45
RÜ SP
(Ruderich)
01.155-113
14:15 - 15:45
RÜ SP
(Ruderich)
01.155-113
14:15 - 15:45
RÜ SP
(Ruderich)
01.155-113
14:15 - 15:45
RÜ SP
(Ruderich)
01.155-113
14:15 - 15:45
RÜ SP
(Ruderich)
01.155-113
15:00
16:00
16:15 - 17:45
RÜ SP
(Ruderich)
01.155-113
16:15 - 17:45
RÜ SP
(Ruderich)
01.155-113
16:15 - 17:45
RÜ SP
(Ruderich)
01.155-113
17:00

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

Verantwortliche
Simon Ruderich, M. Sc., Dustin Nguyen, M. Sc., Christian Eichler, M. Sc., Dr.-Ing. Jürgen Kleinöder

Angaben
Übung
2 SWS
für Gasthörer zugelassen, Sprache Deutsch

Studienfächer / Studienrichtungen
WPF MT-MA-BDV ab 1
WPF M-BA 2
WPF TM-BA 2
PF CE-BA-G 2-3
PF INF-BA 2-3
PF INF-LAG ab 5
PF IuK-BA 2-3
PF WINF-BA 2-3
PF MT-BA-BV 4

Kurse
      
Mo  10:15 - 11:45  01.155-113
Kurs R01 (Zahn, Johannes; Knauer, Lou)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Mo  12:15 - 13:45  01.155-113
Kurs R02 (Windsheimer, Felix)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Mo  14:15 - 15:45  01.155-113
Kurs R03 (Ottman, Jenny)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Mo  16:15 - 17:45  01.155-113
Kurs R04 (Bender, Kilian; Bergmann, Paul)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Di  10:15 - 11:45  01.155-113
Kurs R05 (unbetreut)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Di  12:15 - 13:45  01.155-113
Kurs R06 (Baecker, Ruben; Perst, Timur)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Di  14:15 - 15:45  01.155-113
Kurs R07 (Gsänger, Helene; Hanika, Felix)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Di  16:15 - 17:45  01.155-113
Kurs R08 (Stephan, Milan; Weidner, Johannes)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Mi  12:15 - 13:45  01.155-113
Kurs R09 (Dengler, Eva; Güthlein, Florian)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Mi  14:15 - 15:45  01.155-113
Kurs R10 (Bläse, Fabian; Nguyen, Dustin)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Mi  16:15 - 17:45  01.155-113
Kurs R11 (Schleier, Tobias; Friedrich, Kay)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Do  10:15 - 11:45  01.155-113
Kurs R12 (Brander, Julian)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Do  12:15 - 13:45  01.155-113
Kurs R13 (Schreiner, Jonas)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Do  14:15 - 15:45  01.155-113
Kurs R14 (Braun, Lukas; Schoeninger, Stefan)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Fr  12:15 - 13:45  01.155-113
Kurs R16 (Preis, Julian; Ruderich, Simon)
Simon Ruderich
Dustin Nguyen
Christian Eichler
      
Fr  14:15 - 15:45  01.155-113
Kurs unbetreut
Simon Ruderich
Dustin Nguyen
Christian Eichler

Korrekturhinweise nach oben ▲

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 Beenden des Programms wieder 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.

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. 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 pro Abgabe maximal -3
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 bei Fehler 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.

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 Anmerkung
static fehlt 0,5 pro Abgabe maximal -2
Unnötige globale Variable 0,5 pro Abgabe maximal -1
free(3) fehlt 1 pro Abgabe maximal -3
close(2) oder fclose(3) fehlt 1 pro Abgabe maximal -3
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 pro Funktionsaufruf maximal -1
errno wird vor perror(3) überschrieben (z.B. durch Funktionsaufruf) 0,5 pro Abgabe maximal -2
sonstige 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 1

Programmierstil (Hinweise)

Fehlerbild Verbesserte Lösung
if (var) { free(var); } free(var);
if (ptr == 0) { ... } if (ptr == NULL) { ... }
(*ptr).member ptr->member