|
|
@@ -177,50 +177,3 @@ Bei dieser Aufgabe ist Ihre Dokumentation wichtig, um Ihren Programmablauf nachv
|
|
177
|
177
|
|
|
178
|
178
|
[Testing]: https://doc.rust-lang.org/book/testing.html
|
|
179
|
179
|
[Documentation Tests]: https://doc.rust-lang.org/book/testing.html#documentation-tests
|
|
180
|
|
-
|
|
181
|
|
-
|
|
182
|
|
-
|
|
183
|
|
-
|
|
184
|
|
-___
|
|
185
|
|
-
|
|
186
|
|
-## ALT
|
|
187
|
|
-
|
|
188
|
|
-Da Sie alle Zeicheneingaben, außer Whitespaces (Leerzeichen, TAB usw.) und `exit` als Kommandoaufruf interpretieren, wird sich Ihre Shell beim Aufruf Ihrer Programme genauso verhalten wie die normale Shell. Die zur Prozessverwaltung verwendeten Sonderzeichen wie &, | usw. werden in dieser Aufgabe nicht behandelt. Somit wird immer nur ein Programm inklusive aller angegebenen Parameter aufgerufen, auf dessen Ende die Shell wartet, um dann wieder den Prompt auszugeben und auf neue Eingaben zu warten.
|
|
189
|
|
-
|
|
190
|
|
-```text
|
|
191
|
|
-bsys-shell /Users/maechtel$ ps 1
|
|
192
|
|
- PID TT STAT TIME COMMAND
|
|
193
|
|
- 1 ?? Ss 28:42.16 /sbin/launchd
|
|
194
|
|
-bsys-shell /Users/maechtel$ cat blabla.txt
|
|
195
|
|
-cat: blabla.txt: No such file or directory
|
|
196
|
|
-bsys-shell /Users/maechtel$ cat testdatei.txt
|
|
197
|
|
-Hello you snoopy user ....
|
|
198
|
|
-bsys-shell /Users/maechtel$ file testdatei.txt
|
|
199
|
|
-testdatei.txt: ASCII text
|
|
200
|
|
-bsys-shell /Users/maechtel$ exit
|
|
201
|
|
-exit
|
|
202
|
|
-```
|
|
203
|
|
-
|
|
204
|
|
-### *Command* Datenstruktur
|
|
205
|
|
-
|
|
206
|
|
-
|
|
207
|
|
-```Rust
|
|
208
|
|
-#[derive(Debug)]
|
|
209
|
|
-pub enum Command {
|
|
210
|
|
- /// Execute a command with arguments.
|
|
211
|
|
- Exec { prog: CString, argv: Vec<CString> },
|
|
212
|
|
- /// Empty command.
|
|
213
|
|
- Empty,
|
|
214
|
|
- /// Exit.
|
|
215
|
|
- Exit,
|
|
216
|
|
-}
|
|
217
|
|
-```
|
|
218
|
|
-
|
|
219
|
|
-- 'Exec': 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.
|
|
220
|
|
-- 'Empty': Keine Eingabe, z.B. hat der Benutzer nur Return, Leerzeichen oder andere Whitespaces getippt.
|
|
221
|
|
-- 'Exit': Dieses Kommando bedeutet, dass sich die Shell vor dem Start der nächsten Loop beendet.
|
|
222
|
|
-
|
|
223
|
|
-Mehr Kommandos kommen in der optionalen Aufgabe Task3 dazu.
|
|
224
|
|
-
|
|
225
|
|
-
|
|
226
|
|
-Die Funktion `parse_exec` enthält den generischen Typen I mit dem Trait Bound Iterator. Das bedeutet, die Funktion verlangt von dem generischen Typen I, dass er vom Typ Iterator mit Items auf `&str` ist. Somit können Sie in der Funktion über den Parameter `args` iterieren. Bei diesen Arten von Funktionen mit Iteratoren müssen typischerweise zusätzlich Lifetime Parameter (`a) mit angegeben werden. Auf dieses Thema kommen wir noch in den nächsten Wochen zu sprechen.
|