Skip to main content.

Navigation:

Aufgabe 1: Client

Ziel

Aufgabe

In dieser Aufgabe soll ein minimaler Client zu Auswertung einfacher Kommandos (less, cd, cp, la) implementiert werden. Zu diesem Zweck soll die Vorgabe um die Funktionalität zum Parsen der Eingabe der Kommandozeile erweitert werden. Dazu soll die Eingabe im bereitgestelltem Puffer auswerten und entsprechend dieser Eingabe die Kommandos aufgerufen werden. Zur Vereinfachung der Auswertung werden folgende Annahmen über die Struktur der Eingabezeile gemacht:

Die Funktionsfähigkeit der Erweiterungen soll anhand der im Rahmen der Aufgabe implementierten Kommandos less, cd, cp, la gezeigt werden.

Implementierungshinweise

Die Aufgabe besteht im Wesentlichen aus zwei Teilen: der Auswertung der Eingabe und der Umsetzung der einzelnen Kommandos. Wir empfehlen folgende Bearbeitungsreihenfolge:

  1. Implementierung bzw. Erweiterung der Methoden void Message(char) und void Parse() der Klasse CommandLine. Dafür sollte eine Struktur definiert werden, in der die gefundenen Kommandoanteile abgelegt werden und auf die die Klasse zugreifen kann.
    Hinweise: Eine Zeile wird begrenzt durch '\n' oder EOF
    Weitere Infos: getchar(3), bash, sh, tcsh, strtok(3), strcmp(3)
  2. Aufruf und Umsetzung der erkannten Kommandos. Zu diesem Zweck wird die Methode void Execute() der Subklassen von Command verwendet. Die zu implementierenden Kommandos sollen die folgende Funktionalität aufweisen:
    • less [file]
      Dieses Kommando soll den Inhalt einer Datei anzeigen.
      Weitere Infos: cat(1), less(1)
    • cd [dir]
      Entsprechend dem bekanntem Kommando CD wird in das angegebene Verzeichniss gewechselt.
      Weitere Infos: chdir(2), getuid(2), getpwuid(3)
    • cp [src] [dest]
      Das Kommando cp kopiert eine Datei oder ein Verzeichniss.
      Weitere Infos: cp(1)
    • la [names...]
      Entspricht dem Kommando ls -la als Parameter können Dateien oder Verzeichnisse angegeben werden. Wird ein Verzeichnis als Parameter angegeben, wird dessen Inhalt ausgegeben. Bei einem Aufruf ohne Parameter soll der Inhalt des aktuellen Verzeichnisses ausgegeben werden. Die Ausgabe muss nicht extra sortiert werden.
      Weitere Infos: opendir(3), readdir(3), stat(2), getgrgid(3), time(2), locatime(3).
      Siehe auch Texinfo zu ls unter Linux (info ls)

Hinweis: Achtet auf eine saubere Verwaltung aller von Euch allozierten Puffer. Achtet außerdem darauf, dass Funktionen und Variablen, die modullokal gültig sind, als static gekennzeichnet werden.

Vorgabe

Zur Lösung der Aufgabe benötigt ihr die erste Vorgabe. Sie enthält neben dem bereit vollständigem Quellcode auch das Makefile und einige Tools, die es euch ermöglichen eueren Client zu übersetzen und zu testen.