/fhnw-syspr-work-05

FHNW Modul System-Programmierung (syspr) Hands-on Lektion 5

Primary LanguageC

System-Programmierung

Hands-on zu Lektion 5

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.

a) fork(), 15'

  • 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?

b) Signal Masken, 45'

  • 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.

c) exit(), 15'

  • 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?

d) Zombie-Prozesse, 15'

  • 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.

e) Eigenes system(), 15'

  • 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.

Abgabe (optional)

  • 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 :)

Tools

Git

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

Nano

Auf dem Raspberry Pi

  • Neue oder bestehende Datei öffnen mit $ nano FILE
  • Editieren (Achtung, nano hat kein Undo)
  • Speichern mit CRTL-X Y RETURN

SSH

Auf Ihrem Computer

  • Terminal öffnen (Mac) oder WINDOWS R cmd RETURN (Windows)
  • SSH Session starten mit
    $ ssh pi@raspberrypi.local

Support