Parcourir la source

more german, less denglish, no 'childs' anymore

Michael Mächtel il y a 8 ans
Parent
révision
522bd59770
1 fichiers modifiés avec 56 ajouts et 18 suppressions
  1. 56
    18
      hw6/task1/README.md

+ 56
- 18
hw6/task1/README.md Voir le fichier

@@ -1,10 +1,15 @@
1 1
 # README hw6-t1
2 2
 
3
-Schreiben Sie ein Programm, welches 2 Child's erzeugt. Der Parent übergibt an die beiden Childs über eine Pipe die Daten als Strings, die als Parameter beim Aufruf mit angegeben werden.
3
+Schreiben Sie ein Programm, welches 2 Kindprozesse erzeugt. Der Elternprozess
4
+übergibt an die beiden Kindprozesse über eine Pipe die Daten als Strings, die
5
+als Parameter beim Aufruf mit angegeben werden.
4 6
 
5
-Bei Aufruf des Programms geben Sie eine Zahlensequenz (`i32`) von mindestens 2 Zahlen an. Diese Zahlensequenz übergibt dann der Parent an die beiden Childs. Die Zahlen sind alle vom Typ `i32`.
7
+Bei Aufruf des Programms geben Sie eine Zahlensequenz (`i32`) von mindestens 2
8
+Zahlen an. Diese Zahlensequenz übergibt dann der Elternprozess an die beiden
9
+Kindprozesse. Die Zahlen sind alle vom Typ `i32`.
6 10
 
7
-Werden zuwenig Parameter angegeben, so soll eine(!) Zeile 'Hilfe' ausgegeben werden, wie z.B.:
11
+Werden zuwenig Parameter angegeben, so soll eine(!) Zeile 'Hilfe' ausgegeben
12
+werden, wie z.B.:
8 13
 
9 14
 ```text
10 15
 Correct usage: number number <number> ...
@@ -12,35 +17,60 @@ Correct usage: number number <number> ...
12 17
 
13 18
 > Wichtig: Nur eine Zeile 'Hilfe' ausgeben.
14 19
 
15
-Child1 berechnet aus der Zahlensequenz die Summe, Child2 das Produkt. Child1 und Child2 geben dann das Ergebnis auf der Konsole direkt aus.
20
+Kindprozess1 berechnet aus der Zahlensequenz die Summe, Kindprozess2 das
21
+Produkt. Kindprozess1 und Kindprozess2 geben dann das Ergebnis auf der Konsole
22
+direkt aus.
16 23
 
17 24
 ```text
18 25
 $ ./task1 -1 2 4 6 19 -100
19
-sending to childs: -1 2 4 6 19 -100
26
+sending to both child: -1 2 4 6 19 -100
20 27
 Sum = -70
21 28
 Mul = 91200
22 29
 ```
23 30
 
24
-> Format der Ausgabe genau einhalten. Das bedeutet, die Ausgabe des Childs mit der Summenberechnung muss immer VOR der Ausgabe des Childs mit der Multiplikation erfolgen. Welchen einfachen, allerdings Laufzeit 'schädlichen' Trick können Sie dafür benutzen, den Sie bereits kennen? Wie lässt sich der Parameter dafür tunen, um eine optimale Laufzeit (kurz!) des Programms zu erreichen. Kennen Sie eine Möglichkeit, ohne diesen Trick eine eindeutige Reihenfolge der Childs vorzugeben (muss nicht implementiert werden)?
25
-
26
-Werten Sie den Status der Childs im Elternprozess aus und beenden Sie das Programm nur im Erfolgsfall beider Childs mit dem Exit-Code 0. Erfolgsfall bedeutet dabei, dass der Child beendet wurde und den Exit Code 0 gesendet hat. Treten Fehler im Child auf, so sendet der Child z.B. den exit Code 1, so dass der Elternprozess dies auswerten kann und das Programm (Parent) ebenfalls mit exit Code 1 beendet.
31
+> Format der Ausgabe genau einhalten. Das bedeutet, die Ausgabe des
32
+> Kindprozesses mit der Summenberechnung muss immer VOR der Ausgabe des
33
+> Kindprozesses mit der Multiplikation erfolgen. Welchen einfachen, allerdings
34
+> Laufzeit 'schädlichen' Trick können Sie dafür benutzen, den Sie bereits
35
+> kennen? Wie lässt sich der Parameter dafür *tunen*, um eine optimale Laufzeit
36
+> (kurz!) des Programms zu erreichen. Kennen Sie eine Möglichkeit, ohne diesen
37
+> Trick eine eindeutige Reihenfolge der Kindprozesse vorzugeben (muss nicht
38
+> implementiert werden)?
39
+
40
+Werten Sie den Status der Kindprozesse im Elternprozess aus und beenden Sie das
41
+Programm nur im Erfolgsfall beider Kindprozesse mit dem Exit-Code 0. Erfolgsfall
42
+bedeutet dabei, dass der Kindprozess beendet wurde und den Exit-Code 0 gesendet
43
+hat. Treten Fehler im Kindprozess auf, so sendet der Kindprozess den Exit-Code
44
+1, so dass der Elternprozess dies auswerten kann und das Programm
45
+ebenfalls mit Exit-Code 1 beendet.
27 46
 
28 47
 >Tip: waitpid() sollte dazu entsprechend ausgewertet werden.
29 48
 
30 49
 Beim Aufruf über cargo die '--' nicht vergessen, siehe dazu  **cargo help run**.
31 50
 
32
-Die Daten zwischen Eltern und Kindern werden als Byte-Stream gesendet. Achten Sie auf die Größe des Puffers, den die Childs zum Empfangen anlegen. Definieren Sie für diese Größe eine `const` und setzen Sie diese auf 256.
51
+Die Daten zwischen Eltern und Kindern werden als Byte-Stream gesendet. Achten
52
+Sie auf die Größe des Puffers, den die Kindprozesse zum Empfangen anlegen.
53
+Definieren Sie für diese Größe eine `const` und setzen Sie diese auf 256.
33 54
 
34
-Da die eingelesenen Argumente bereits als Strings vorliegen, bietet es sich an im Programm intern mit Strings zu arbeiten. Damit ergeben sich folgende Hilfsfunktionen:
55
+Da die eingelesenen Argumente bereits als Strings vorliegen, bietet es sich an
56
+im Programm intern mit Strings zu arbeiten. Damit ergeben sich folgende
57
+Hilfsfunktionen:
35 58
 
36 59
 - `concatenate_strings()` :
37 60
 - `split_into_strings()`:
38 61
 - `sum_strings()`:
39 62
 - `mul_strings()`:
40 63
 
41
-> Achten Sie auf einen geeignet grossen Rückgabewert im Erfolgsfall, insbesondere in der Funktion, die die Multiplikation ausführt (`mul_strings()`).
64
+> Achten Sie auf einen geeignet grossen Rückgabewert im Erfolgsfall,
65
+> insbesondere in der Funktion, die die Multiplikation ausführt
66
+> (`mul_strings()`).
42 67
 
43
-> Achten Sie aber bei Ihren Berechnungen auch darauf, das kein Overflow auftreten kann, der das Programm abbricht (siehe Rust Standarddoku: `overflowing`). Wenn einen Berechnung aufgrund eines auftretenden Overflows nicht durchgeführt werden kann, so gibt der Child einen Fehler aus und terminiert - wie immer im Fehlerfall -  mit dem Exitcode '1'. Die Ausgabe des Programms könnte dann z.B. folgendermassen aussehen:
68
+> Achten Sie aber bei Ihren Berechnungen auch darauf, das kein Overflow
69
+> auftreten kann, der das Programm abbricht (siehe Rust Standarddoku:
70
+> `overflowing`). Wenn einen Berechnung aufgrund eines auftretenden Overflows
71
+> nicht durchgeführt werden kann, so gibt der Kindprozess einen Fehler aus und
72
+> terminiert - wie immer im Fehlerfall -  mit dem Exit-Code '1'. Die Ausgabe des
73
+> Programms könnte dann z.B. folgendermassen aussehen:
44 74
 
45 75
 ```text
46 76
 > cargo run -- 1000 1000 1000 1000 1000 1000 1000
@@ -52,7 +82,8 @@ Sum = 7000
52 82
 
53 83
 > ... steht für mögliche andere Ausgaben
54 84
 
55
-Darüber hinaus sollten Sie bei Code-Wiederholungen prinzipiell immer überlegen, welche weiteren Hilfsfunktionen sich dadurch anbieten.
85
+Darüber hinaus sollten Sie bei Code-Wiederholungen prinzipiell immer überlegen,
86
+welche weiteren Hilfsfunktionen sich dadurch anbieten.
56 87
 
57 88
 ## Externe Crates
58 89
 
@@ -60,13 +91,20 @@ Benutzen Sie für Ihre Implementierung nur die externe Crate `nix`.
60 91
 
61 92
 ## Module und Tests
62 93
 
63
-Ob und wie Sie den Code in Module aufteilen wollen ist Ihnen überlassen. Schreiben Sie jedoch Ihre Unit-Tests in der Datei `unit_test_pipe.rs` oder als eigenständigen Test, der von 'cargo test' aufgerufen wird, siehe auch [Testing][]. Einfache Tests können auch direkt in die Dokumentation 'codiert' werden, siehe [Documentation Tests][]
94
+Ob und wie Sie den Code in Module aufteilen wollen ist Ihnen überlassen.
95
+Schreiben Sie jedoch Ihre Unit-Tests in der Datei `unit_test_pipe.rs` oder als
96
+eigenständigen Test, der von 'cargo test' aufgerufen wird, siehe auch
97
+[Testing][]. Einfache Tests können auch direkt in die Dokumentation 'codiert'
98
+werden, siehe [Documentation Tests][]
64 99
 
65
-Achten Sie beim Exit Code des Elternprozesses darauf, dass dieser nur 0 ist, wenn BEIDE Childs jeweils einen exit Code 0 zurücksenden.
100
+Achten Sie beim Exit-Code des Elternprozesses darauf, dass dieser nur 0 ist,
101
+wenn BEIDE Kindprozesse jeweils einen Exit-Code 0 zurücksenden.
66 102
 
67 103
 ## Dokumentation
68 104
 
69
-Es ist ausreichend, wenn Sie Ihre Dokumentation im Code soweit ergänzen, dass dieser nachvollziehbar ist. Eine Dokumentation über `cargo doc` muss nicht erstellt werden.
105
+Es ist ausreichend, wenn Sie Ihre Dokumentation im Code soweit ergänzen, dass
106
+dieser nachvollziehbar ist. Eine Dokumentation über `cargo doc` muss nicht
107
+erstellt werden.
70 108
 
71
-[Testing]: https://doc.rust-lang.org/book/testing.html
72
-[Documentation Tests]: https://doc.rust-lang.org/book/testing.html#documentation-tests
109
+[Testing]: https://doc.rust-lang.org/book/testing.html 
110
+[Documentation Tests]:https://doc.rust-lang.org/book/testing.html#documentation-tests

Chargement…
Annuler
Enregistrer