• Keine Ergebnisse gefunden

5. ¨Ubungsblatt Ausgabe: 16.12.2002 Bearbeitungszeit: Zwei Wochen

N/A
N/A
Protected

Academic year: 2022

Aktie "5. ¨Ubungsblatt Ausgabe: 16.12.2002 Bearbeitungszeit: Zwei Wochen"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Praktische Informatik 3 WS 2002/03

5. ¨ Ubungsblatt

Ausgabe: 16.12.2002

Bearbeitungszeit: Zwei Wochen

Christoph L¨uth <cxl>

Felix Beckwermert <foetus>

Michael Skibbe <mskibbe>

Dennis Walter <dw>

Rafael Trautmann <pirate>

Thomas Meyer <mclee>

Leider war das Officepaket Haskell XY nicht der erhoffte Kassenschlager.

Zwei verkaufte Exemplare reichten nicht aus, die f¨unfw¨ochige Werbekampa- gne zu finanzieren, und so ist das venture capital schnell aufgebraucht.

Etwas desillusioniert wechseln Sie die Seiten, und schließen sich der open source-Bewegung1 an. Deshalb werden wir in diesem Aufgabenblatt ein be- kanntes Unix-Kommando reimplementieren, nat¨urlich in Haskell.

9 Synchronisation 20 Punkte

In dieser Aufgabe soll ein Programm implementiert werden, welches es erm¨og- licht, ¨Anderungen zwischen zwei Verzeichnissen abzugleichen (im Sinne des Unix-Kommandosrsync(1), allerdings nur zwischen lokalen Verzeichnissen).

Das Programm soll wie folgt aus der Kommandozeile aufgerufen werden k¨onnen:

sync [-i] src trg

wobei src das Quellverzeichnis und trg das Zielverzeichnis ist. Das sync- Utility soll alle Dateien in src, die in trg nicht existieren, oder die in src sp¨ater als in trg modifiziert wurden, nach trg kopieren. Unterverzeichnisse werden rekursiv behandelt. Verzeichnisse in trg, einschließlich trg selbst, sollen wenn n¨otig angelegt werden.

Die Option -i bezeichnet den interaktiven Modus. Im interaktiven Modus soll der Benutzer vorher um Best¨atigung gefragt werden, bevor eine alte Datei

¨

uberschrieben wird.

Beachten Sie die Fehlerbehandlung, das Programm sollte bei nicht lesbaren oder schreibbaren Verzeichnissen/Dateien nicht undefiniert abbrechen.

Hinweise: Folgende Funktionen sind f¨ur diese Aufgabe sehr hilfreich:

• Die meisten Funktionen im ModulDirectory, insbesondere die folgen- den:

1http://www.fsf.org/

(2)

getDirectoryContents :: FilePath -> IO [FilePath]

doesFileExist :: FilePath -> IO Bool doesDirectoryExist :: FilePath -> IO Bool createDirectory :: FilePath -> IO ()

getModificationTime :: FilePath -> IO ClockTime

getDirectoryContents liefert als Inhalt des Verzeichnisses die Liste der Dateinamen, allerdings nicht den vollen Pfad.doesDirectoryExist und doesFileExist pr¨ufen, ob das angegebene Verzeichnis bzw. die angegebene Datei existiert; mit diesen Funktionen l¨aßt sich auch her- ausfinden, ob ein Dateiname, der von getDirectoryContents zur¨uck- gegeben wurde, ein Verzeichnis oder eine Datei ist.

getModificationTime liefert die Zeit der letzten Modifikation. Der R¨uckgabetype ist eine Instanz der Klasse Ord und kann daher mit <

etc. verglichen werden.

• Das Modul System bietet den Zugriff auf Kommandozeilenargumente (getArgs) und Shell-Kommandos (system):

data ExitCode = ExitSuccess | ExitFailure Int deriving (Eq, Ord, Read, Show) getArgs :: IO [String]

system :: String -> IO ExitCode

• Es gibt keine explizite Funktion, um Dateien zu kopieren; man kann entweder einen geeigneten Shell-Befehl zusammenstellen, und mit der FunktionSystem.systemausf¨uhren (was aber nicht portabel ist), oder die Datei mitreadFilelesen undwriteFileschreiben (was aber nicht so effizient ist).

Dieses ist Version 1.0 von 16. Dezember 2002.

Referenzen

ÄHNLICHE DOKUMENTE

welche den Abstand zwischen zwei Punkten berechnen sowie zwei Punkte addieren (den ersten um den zweiten verschieben) sind sehr hilfreich. 3 111001101010101

Um zu testen, ob eine Zahl m eine Primzahl ist, kann man f¨ ur alle Zahlen von 2 bis b √ mc testen, ob sie m teilen, was f¨ ur große Zahlen sehr aufw¨ andig ist. Die Firma Fermat

Eine bessere, aber aufw¨ andigere Variante (Variante B) ist folgende: f¨ ur jeden ein- zelnen dieser Punkte kann ein potentielles engeres Paar nur noch innerhalb eines

Bei einem asymmetrischen Schl¨ usselverfahren hat jeder Teilnehmer X einen ¨ offentlichen Schl¨ ussel P X , den jeder andere Teilnehmer kennt, und einen geheimen Schl¨ ussel S X ,

• Der Durchschnitt der bisher zu Hause oder ausw¨ arts erzielten oder zugelassenen Tore ist eine verl¨ assliche Annahme ¨ uber die in diesem Spiel erzielten und zugelassenen Tore;..

Zus¨ atzlich sollen in dem Graphen die eingehenden und ausgehenden Kanten jedes Knoten separat gehalten werden, als endliche Abbildung von den Knoten auf eine endliche Menge von

Am Anfang des Spieles soll eine zuf¨ allige Anzahl (zwischen drei und f¨ unf) Satelliten ausgew¨ urfelt werden; Umlauf- geschwindigkeit, Orbit (Radius der Umlaufbahn) und Typ

Editor Dateibearbeitung less Ansehen einer Datei cp Kopieren einer Datei mv Verschieben einer Datei rm Löschen einer Datei diff Vergleich von Dateien cat Konkatenieren von Dateien