Aufgabe 1: 10 Punkte
====================
Wenn man ein Programm ausschliesslich als binaere Version, also insbesondere
ohne Quelle, vorliegen hat, ist es bisweilen schwer festzustellen, warum es
sich moeglicher Weise anders verhaelt, als erwartet.
Dies kann zum Beispiel an gelesenen Konfigurationsdateien liegen.
Finden Sie heraus, auf welche durch Sie beeinflussbaren Dateien, d.h. Dateien,
die in Ihrem HOME-Verzeichnis liegen, das Programm gv
mit den Systemcalls open(), stat(), stat64() zugreifen will, und ob es gelingt.
Es soll jeweils eine Datei mit den Dateiennamen (alphabetisch geordnet, ohne
Mehrfachnennungen) erzeugt werden.
open.cfg - Datei mit Dateinamen, die erfolgreich geoeffnet werden konnten
noexist.cfg - Datei mit Dateinamen, die nicht vorhanden waren
Schreiben Sie ein Script gv-look-cfg, das diese Dateien fuer den aktuellen Nutzer
automatisch erstellt. Das Script soll sowohl auf gruenau1 (linux)
als auch auf star (solaris) benutzbar sein. Das manuelle Abbrechen des
gestarteten Kommandos "gv" soll durch den Nutzer durchgefuehrt werden.
Tipp:
uname -s # liefert den Namen des Betriebssystems.
gv # /usr/bin/gv auf gruenau1
# /opt/csw/bin/gv auf star
Aufgabe 2: 15 Punkte
=====================
Schreiben Sie eine Client-Server-Programmm, das es erlaubt
die Differenz der Systemzeiten zweier Rechner zu bestimmen.
Das Programm sollte sowohl als Server als auch als Client laufen.
Der Client soll die Differenz und die aktuellen Zeiten des Servers und des
Clienten ausgeben (Genauigkeit: <Sekunden>.<Mikrosekunden>).
Das Programm soll als Client in der Form
clockdiff -c <Hostname>
oder
clockdiff -c <IP-Adresse>
aufgerufen werden.
Als Server soll das Programm in der Form
clockdiff -s
aufgerufen werden.
Benutzen Sie zur Bestimmung der Zeit die Bibliotheksfunktion "gettimeofday".
Es sollte zur Bestimmung der aktuellen Zeit des Clienten der Mittelwert
zwischen dem Zeitpunkt des Absendens und dem Zeitpunkt des Empfangens
benutzt werden(Berücksichtigung der Laufzeit).
Hinweis: Der Server sollte auf einem Solaris-Rechner laufen (kein Firewall)
und der Client sowohl auf Solaris- als auch auf Linux-Rechnern. Beachten Sie
die unterschiedliche Zahlendarstellung bei X86 und Sparc.
Folgende Files sollten abgegeben werden:
Dokumentation
Makefile
C-Quelltexte(Headerfile, Client-Server-Programm)
Die Dateien sollen in ein tar-File clockdiff.tar gepackt werden.
Aufgabe 3: 10 Punkte
====================
Schreiben sie ein awk-Script, das einen Prozessbaum ausgibt.
Als Eingabe kann dabei die Ausgabe von ps verwendet werden.
Jeder Knoten des Baumes soll fuer einen Prozess stehen und
Informationen ueber PID, PPID und UID enthalten.
Kindprozesse sollen ihrem Elternprozess in der Auflistung folgen.
Siehe auch:
awk(1), gawk(1), ps(1)
Beispiel:
swapper (user: 0, pid: 0, ppid: 0)
#== /sbin/init (user: 0, pid: 1, ppid: 0)
| #== xbuffy (user: 17035, pid: 1441, ppid: 1)
| #== keyserv (user: 0, pid: 63, ppid: 1)
| #== portmap (user: 0, pid: 54, ppid: 1)
| #== inetd (user: 0, pid: 139, ppid: 1)
| | #== rpc.rquotad (user: 0, pid: 29922, ppid: 139)
| | #== in.rshd (user: 400, pid: 1493, ppid: 139)
| | | #== csh (user: 400, pid: 1494, ppid: 1493)
| | | | #== /usr/local/X11/bin/xterm (user: 0, pid: 1495, ppid: 1494)
| | | | | #== =/usr/local/bin/tcsh (user: 400, pid: 1496, ppid: 1495)
| #== xbuffy (user: 400, pid: 1502, ppid: 1)
| #== rsh (user: 17035, pid: 24025, ppid: 1)
| #== (biod) (user: 0, pid: 75, ppid: 1)
| #== /usr/lib/sendmail (user: 0, pid: 120, ppid: 1)
| #== rpc.statd (user: 0, pid: 111, ppid: 1)
| #== (biod) (user: 0, pid: 76, ppid: 1)
| #== update (user: 0, pid: 130, ppid: 1)
| #== (biod) (user: 0, pid: 77, ppid: 1)
| #== ypbind (user: 3, pid: 59, ppid: 1)
| #== rsh (user: 17035, pid: 1492, ppid: 1)
| #== (biod) (user: 0, pid: 78, ppid: 1)
| #== rpc.lockd (user: 0, pid: 114, ppid: 1)
| #== rsh (user: 17035, pid: 1517, ppid: 1)
| #== /usr/lib/lpd (user: 0, pid: 142, ppid: 1)
| #== cron (user: 0, pid: 133, ppid: 1)
| #== screenblank (user: 0, pid: 124, ppid: 1)
| #== syslogd (user: 0, pid: 89, ppid: 1)
| #== rpc.mountd (user: 0, pid: 107, ppid: 1)
| #== (nfsd) (user: 0, pid: 99, ppid: 1)
| | #== (nfsd) (user: 0, pid: 100, ppid: 99)
| | #== (nfsd) (user: 0, pid: 101, ppid: 99)
| | #== (nfsd) (user: 0, pid: 102, ppid: 99)
| | #== (nfsd) (user: 0, pid: 103, ppid: 99)
| | #== (nfsd) (user: 0, pid: 104, ppid: 99)
| | #== (nfsd) (user: 0, pid: 105, ppid: 99)
| | #== (nfsd) (user: 0, pid: 106, ppid: 99)
| #== automount (user: 0, pid: 117, ppid: 1)
| #== rsh (user: 17035, pid: 24183, ppid: 1)
[... jede Menge geloescht ...]
Hinweis: Das Programm soll auf einem LINUX-System (gruenau1) lauffaehig sein.
-------------------------------------------------------------------------------
Abgabeformat aller Aufgaben
===========================
Die Abgabe aller Aufgaben erfolgt ueber Goya, als eine Datei
musterfrau.tar, wobei musterfrau durch Ihren Namen bzw. die Namen der
Gruppenmitglieder (durch "-" getrennt) zu ersetzen ist.
Das tar-File soll folgende Files enthalten:
gv-look-cfg # Script, das open.cfg und noexist.cfg erzeugt
open.cfg # Ergebnis des Scripts fuer gruenau1
noexist.cfg # Ergebnis des Scripts fuer gruenau
open.cfg.s # Ergebnis des Scripts fuer star
noexist.cfg.s # Ergebnis des Scripts fuer star
clockdiff.tar # Alle Files zur 2.Aufgabe
pstree.awk # AWK-Script zur 3.Aufgabe
Abgabetermin: 8.7.2014 23:59 Uhr
Fr 20. Jun 08:39:37 CEST 2014
J-P Bell