Blatt 7
Übungen zu Systemnahe Software
Wintersemester 95/96
Sektion Angewandte Informationsverarbeitung
Abgabe: Donnerstag, 11.01.96
Aufgabe 1: 15 Punkte
Was gibt's Schöneres, als den zu Weihnachten sich selbst
geschenkten PC mit einem kleinen C-Progrämmchen einzuweihen?
Noch dazu, wenn man sich mit alf beschäftigen darf:
Archivierung loser Files . (Der Traum jedes
Buchhalters!) Nun zur Sache: schreiben Sie ein C-Programm, das
mehrere Dateien in ein Archiv packen kann. (Ähnliches kennen
Sie ja bereits von dem Kommando shar!)
alf a|d|x|l archivname {filenames}
- die Option a legt ein Archiv archivname mit
den als Parametern übergebenen Dateien an bzw. erweitert
ein vorhandenes Archiv um die angegebenen Dateien.
- sollte eine neu angegebene Datei bereits im Archiv sein, so
wird der alte Eintrag überschrieben, bzw. es genügt,
den alten Eintrag als gelöscht zu markieren. Erscheint eine
Datei mehrfach als Argument auf der Kommandozeile, so soll sie
natürlich nur einmal im Archiv abgelegt werden.
- die Option d löscht Dateien aus dem Archiv wieder
heraus. Es ist nicht nötig, eine Datei physikalisch zu entfernen.
Es genügt, sie als gelöscht zu markieren.
- die Option l zeigt alle Dateien an, die im Archiv enthalten
sind. Gelöschte Dateien erscheinen hier natürlich nicht.
Angezeigt werden soll der Dateiname, die Dateigröße
und (siehe Teil 2) der Zeitstempel der Datei (modification
time).
- die Option x extrahiert angegebene Dateien aus dem
Archiv. Werden keine Dateinamen angegeben, so sollen alle im
Archiv vorhandenen Dateien extrahiert werden. Falls gleichnamige
Dateien bereits auf dem Directory stehen, werden diese einfach
überschrieben.
- verwenden sie Filedeskriptoren bzw. die Funktionen open(),
read(), write(), close() für den IO-Transfer. Sämtliche
f-Funktionen sind nicht erlaubt (fopen(), fwrite(),
etc.)
- das Programm soll natürlich in Module zerlegt
werden
- wenden Sie Teamarbeit an (soweit möglich!) (und nicht:
einer programmiert - die anderen schauen zu ...)
Aufgabe 2: 5 Punkte
Verändern Sie Ihr Programm so, daß beim Auspacken der
Dateien die ursprünglichen Zeitstempel (modification time
und access time) sowie die Zugriffsrechte (zumindest für
den Owner) der Dateien wieder auf den ursprünglichen
Wert gesetzt werden.
Wenn also eine Datei ausführbar war, bevor sie archiviert
wurde (x-Flag gesetzt oder Modus = Oktal 0700), so soll
sie es nach dem Extrahieren aus dem Archiv auch wieder sein!
- siehe Beispielprogramme unter /home/fermat/grabert/soft/zb/7
- sowie utime(), stat(), open() (im CREATE-Modus)
Trotz aller Arbeit: ein gutes neues Jahr 1996!