Gedächtnisprotokoll
Hinweis: Die Reihenfolge der Aufgaben könnte anders gewesen sein. Es ist nicht mehr ganz klar, welche der beiden Aufgaben (2,3) jeweils 2 Punkte erhalten haben.
Aufgabe 1 (2 Punkte)
Aufgabenstellung:
Schreibe einen Client (client.c), der eine Nachricht vom Server empfängt (der Server ist vorhanden und läuft) und diese Nachricht sofort wieder zurücksendet.
Die empfangene Nachricht ist:
Hello World!\0
Es kann sich auf die \0-Terminierung verlassen werden.
Tipp:
Siehe die manpage zu getaddrinfo()
, welche ein entsprechendes Beispiel enthält.
Aufgabe 2 (1 Punkt)
Aufgabenstellung:
Berechne die N-te Fibonacci-Zahl.
- Alloziere dazu dynamisch ein Array und speichere darin das Ergebnis.
- Gib das Array bzw. das Ergebnis zurück.
- Die Funktion wird 10-mal aufgerufen (d.h. es soll die 10. Fibonacci-Zahl berechnet werden).
Tipps:
-
Alloziere das Array:
int* array = malloc((n+1) * sizeof(int));
-
Initialisiere und berechne:
array[0] = 0; array[1] = 1; for (int i = 2; i < N; i++) { array[i] = array[i-1] + array[i-2]; }
Aufgabe 3 (2 Punkte)
Aufgabenstellung:
Öffne eine Pipe und empfange einen String. Sende diesen String zurück, wobei jeder Character in Großbuchstaben umgewandelt wird.
Tipps:
3. Siehe die manpage zu pipe()
, welche ein Beispiel enthält.
4. Beispielhafter Codeausschnitt zur Umwandlung in Großbuchstaben:
if (c < ascii_big_character_upper_limit && c > ascii_big_character_lower_limit) {
c -= 23;
}
(Anmerkung: Die genauen ASCII-Grenzen müssen entsprechend definiert werden.)
Aufgabe 4 (1 Punkt)
Aufgabenstellung:
Führe die Funktion abort()
aus, wenn ein bestimmtes Signal N empfangen wird.
Tipp:
Verwende signal()
und implementiere gegebenenfalls einen eigenen Signal-Handler:
signal(signum, sig_handler); // Definiere sig_handler(), der abort() aufruft:
// Beispiel:
void sig_handler(int signum) {
abort();
}
Alternativ funktioniert es auch direkt so:
signal(signum, abort);
Somit könnte die Aufgabe in einer Zeile gelöst werden.
Gesamtbewertung
- Gesamtpunkte: 6 Punkte
- Bestanden: 2 Punkte reichen zum Bestehen
- Bonus: Es sind 3 Bonuspunkte möglich