Aufgabe 1: Client
Ziel
- Kennenlernen der Entwicklungsumgebung
- Auffrischen der Programmiersprache C++
- Erzeugung eines minimalen Clienten
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:
-
eine Zeile besteht aus einem Kommando, das mit '
\n
' beendet wird - innerhalb eines Kommandos können beliebig viele Worte vorkommen, die durch beliebig viele Leerzeichen und Tabulatoren voneinander getrennt sind
- das erste Wort eines Kommandos bestimmt das auszuführende Kommando alle anderen Wörter sind Parameter
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:
- Implementierung bzw. Erweiterung der Methoden
void Message(char)
undvoid Parse()
der KlasseCommandLine
. 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)
- Aufruf und Umsetzung der erkannten Kommandos. Zu diesem Zweck wird die
Methode
void Execute()
der Subklassen vonCommand
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 KommandoCD
wird in das angegebene Verzeichniss gewechselt.
Weitere Infos:chdir(2)
,getuid(2)
,getpwuid(3)
-
cp [src] [dest]
Das Kommandocp
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 zuls
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.