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