Betriebssysteme - Werkzeuge und UNIX-Schnittstelle

Praktikum

Aufgabenkomplex 4: 35 Punkte


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