Für Slides und Code Beispiele, siehe Lektion 5
Achtung: Arbeiten Sie nicht direkt auf diesem Repository.
Erstellen Sie eine persönliche Kopie, mit diesem GitHub Classroom Link.
- Schreiben Sie ein Programm my_fork.c, das "forkt".
- Nutzen Sie die online System Call Dokumentation.
- Das Programm soll den folgenden Output ausgeben, mit konkreten PID Werten für pid, pid_c und pid_p:
I'm parent pid of child pid_c I'm child pid of parent pid_p
- Entspricht der Output ihren Erwartungen? Wieso?
- Schreiben Sie ein Programm my_sync.c, das den Code von fork_sig_sync.cTLPI wie folgt erweitert:
- Der neue Code soll ohne tlpi_hdr.h und curr_time.h builden und Signal Masken für blocked und pending Signale ausgeben, dort im Code, wo sich was ändert.
- Hinweis: Dokumentation von sigprocmask() lesen, sigpending() und printf("%032x", ...) nutzen.
- Finden Sie heraus, wieso sich in fork_stdio_buf.cTLPI der Output dieser beiden Aufrufe unterscheidet:
$ ./fork_stdio_buf $ ./fork_stdio_buf > file && cat file
- Wieso wird ein Teil des Outputs doppelt ausgegeben?
- Wieso wird nur im einen Fall der Output verdoppelt?
- Hinweis: Was passiert bei fork() im Speicher?
- Lassen Sie den Beispiel-Code make_zombie.cTLPI laufen.
- Senden Sie dem Zombie-Child ein SIGKILL Signal.
- Was macht der system() Aufruf im Source Code?
- Hinweis: <defunct> bedeutet Zombie-Prozess.
- Implementieren Sie eine eigene system() Funktion.
- Nutzen Sie dazu das sh Kommando mit Argument -c:
$ sh -c "ls | wc"
- Vereinfachung: Gerüst von my_system.c im Repo.
- Lokale Änderungen committen und pushen.
- GitHub Issue erstellen mit "Bitte um Review, @tamberg".
- Offene Fragen ausformulieren, was geht nicht, was haben Sie versucht.
- GitHub mailt mir (@tamberg) automatisch, ich versuche in weniger als 24h zu antworten :)
Auf Ihrem Computer
- Zu Beginn jeder Lektion wird ein Hands-on Repository Link freigeschaltet
- Nachdem Sie das "Assessment" annehmen, bekommen Sie per Email ein Repository
- Die REPO_URL enthält Ihren GitHub Account USER_NAME und Ihre Klasse 3ia oder 3ib, z.B.
https://github.com/fhnw-syspr-3ia/fhnw-syspr-work-05-tamberg
Auf dem Raspberry Pi
- Repository klonen
$ cd ~ $ git clone REPO_URL
- Neue Datei kreieren
$ git add FILE
- Änderungen committen
$ git commit FILE -m "Fixed all bugs"
- Änderungen hochladen
$ git push
Auf dem Raspberry Pi
- Neue oder bestehende Datei öffnen mit $ nano FILE
- Editieren (Achtung, nano hat kein Undo)
- Speichern mit
CRTL-X
Y
RETURN
Auf Ihrem Computer
- Terminal öffnen (Mac) oder
WINDOWS
R
cmdRETURN
(Windows) - SSH Session starten mit
$ ssh pi@raspberrypi.local