|
|
7 lat temu | |
|---|---|---|
| .. | ||
| src | 7 lat temu | |
| Cargo.toml | 8 lat temu | |
| README.md | 8 lat temu | |
Legen Sie ein Library Projekt an mit einer zusätzlichen main.rs Datei. Wandeln
Sie Ihre Shell Lösung aus hw6 in ein Library Projekt, welche mittels cargo run
die Shell - wie bisher - im interaktiven Modus startet.
Verschieben Sie Ihre Tests der Library nach tests/task2.rs.
Definieren Sie einen eigenen Fehler Typen, den Sie in Ihren Funktionen benutzen.
Definieren Sie den ShellError und die zugehörigen Traits im Modul
shellerror.rs. Der eigene Fehler soll in allen Ihren Funktionen verwendet
werden, die einen Fehlertypen zurück geben.
Die Eingabe wird als Aufruf eines Programms, inkl. Parameter, ausgewertet und es wird versucht, das zugehörige Programm zu starten (mit execvp()). Wird das Programm nicht gefunden, so wird eine Fehlermeldung ausgegeben.
bsys-shell /Users/maechtel$ ps 1
PID TT STAT TIME COMMAND
1 ?? Ss 28:42.16 /sbin/launchd
bsys-shell /Users/maechtel$ cat blabla.txt
cat: blabla.txt: No such file or directory
bsys-shell /Users/maechtel$ cat testdatei.txt
Hello you snoopy user ....
bsys-shell /Users/maechtel$ file testdatei.txt
testdatei.txt: ASCII text
bsys-shell /Users/maechtel$ exit
exit
Die Pipe (|) ist hier als Command angegeben, da sie eine neue Art des Programmaufrufs implementiert. Beachten Sie dazu auch die Informationen aus der Vorlesung, insbesondere die Reihenfolge, wie die Kommandos rechts und links der jeweiligen Pipe aufzurufen sind. Scannen Sie somit die Eingabe nach Pipes und teilen Sie den String entsprechend in Substrings auf. Die Substrings entsprechen den einzelnen Programmen, die miteinander per Pipe verbunden werden. Es genügt, wenn 2 Programme per Pipe verbunden werden. Eingaben wie cat filename.txt | grep grading | sort, also mehr als eine Pipe, müssen nicht interpretiert und implementiert werden.
Kommentieren Sie Ihre Funktionen und schreiben Sie eigene Integration Tests in tests/ soweit möglich. Die Dokumentation soll sich per cargo doc erstellen lassen.
Einfache Tests (manchmal sagt ein Test zu einer Funktion mehr als viele Kommentarzeilen …) können auch direkt in die Dokumentation ‘codiert’ werden, siehe Documentation Tests
Benutzen Sie für Ihre Implementierung nur die externe Crate nix.