Systemprogrammierung - AIN/2
Sommersemester 2024


Übungsaufgabe 4: C Aufzählungen, Strukturen, Varianten, Übersetzungseinheiten, POSIX-Funktionen

Abgabe bis 6./7.6.2024

Vorbereitung

Legen Sie ein Arbeitsverzeichnis für Aufgabe 4 an und speichern Sie darin das Archiv ⤵ aufgabe4.tar.gz. Entpacken sie das Archiv mit dem folgenden Kommando:

  tar xzf aufgabe4.tar.gz
Ihr Arbeitsverzeichnis von Aufgabe 4 sollte anschließend folgende Dateien enthalten:
Makefile, listfiles.c, listfiles-out.txt, listfiles-example-dir


Programmierung

Das vorgegebene Programm listfiles.c listet Verzeichnisinhalte rekursiv auf. In listfiles-out.txt finden Sie eine Beispielausgabe, die so ähnlich auch das Linux-Kommando ls -R1 liefern würde. Lesen Sie den Programmtext durch und erstellen Sie dann die darin verwendete Übersetzungseinheit fileinfo mit der folgenden Schnittstelle:


Test und Qualitätssicherung

Verwenden Sie zum Testen die folgenden Befehle und probieren Sie verschiedene Eingaben, insbesondere auch hallo als einzige Eingabe:

  make
  make cppcheck
  valgrind ./listfiles *

Führen Sie auch den folgenden automatisierten Test aus:

  ./listfiles xxx listfiles.c listfiles-example-dir /dev/tty > out.txt 2>&1
  diff -Z listfiles-out.txt out.txt

Bessern Sie gegebenenfalls nach.


Abgabe

Führen Sie Ihr Programm mit den automatisierten Tests vor.
Zeigen Sie das ausgefüllte Teilnahmeprotokoll.

Hinweis:
Der Compiler gcc darf für Ihr Programm keine Fehler oder Warnungen mehr ausgeben.
Ihr Programm muss außerdem ordentlich formatierte sein. Bessern Sie die Formatierung gegebenenfalls mit astyle nach:
astyle -p -H --style=ansi *.[ch]


Freiwillige Zusatzaufgabe (1 Bonuspunkt)

Erstellen Sie ein C-Programm filesize, das als Kommandozeilenargumente beliebig viele Dateinamen erwartet und für jede der Dateien die Größe in Byte auf die Standardausgabe schreibt.

Bei einem Aufruf ohne Kommandozeilenargumente soll das Programm mit der POSIX-Funktion read byteweise von der Standardeingabe lesen und dabei die Anzahl der Bytes zählen. Andernfalls soll das Programm für die angegebenen Dateien zur Größenbestimmung die POSIX-Funktion stat verwenden. Siehe man 2 read und man 2 stat oder die POSIX-Dokumentation im Internet. Achten Sie auf eine korrekte Fehlerbehandlung mit Ausgabe der zugehörigen Systemmeldung. Damit die Systemmeldung in der auf dem Rechner (bzw. im beim Aufruf verwendeten Terminal) eingestellten Sprache erscheint, müssen Sie am Anfang des Programms folgenden Aufruf einfügen (siehe auch man 3 setlocale):

  setlocale(LC_ALL, "");

Hinweise:
Verwenden Sie das Vorlesungsbeispiel count.c als Vorlage. Ersetzen Sie im Fall der Standardeingabe den C-Bibliotheksaufruf fgetc durch den Aufruf der POSIX-Funktion read und bei Dateien die ganze Lese-/Zähl-Schleife durch den Aufruf der POSIX-Funktion stat. Den C-Bibliotheksaufruf fopen brauchen Sie nicht mehr. Beachten Sie außerdem, dass POSIX für ganzahlige Datentypen in der Regel Aliasnamen verwendet. Ihr Programm muss damit richtig umgehen.



Prof. Dr. H. Drachenfels
Hochschule Konstanz - Impressum - Datenschutzerklärung
Letzte Änderung: 28.3.2024