Prof. Franz Schweiggert Abteilung Angewandte
Informationsverarbeitung 13. Januar 2005
Christian Ehrhardt Blatt 9
Allgemeine Informatik 3 (WS 2004/2005)
Abgabetermin 18.01.2005
Ein Mailfolder (manchmal auch Mailordner genannt) besteht auf
unseren SUNs aus einem Verzeichnis, das den Namen des Folders trägt.
Dort gibt es drei Unterverzeichnisse
- new
- In diesem Verzeichnis befinden sich die neuen (ungelesenen)
Mails.
- cur
- Hier befinden sich die gelesenen, aber (noch) nicht
gelöschten Mails.
- tmp
- Dieses Unterverzeichnis kann für dieses Blatt ignoriert werden.
Jede Datei in cur oder new, deren Namen nicht mit einem
Punkt beginnt, enthält genau eine Mail.
Ein Beispiel für einen solchen Mailfolder ist Eure Inbox, die
sich in der Regel im Unterverzeichnis mailbox/inbox/ im
Heimatverzeichnis befindet. Dieses Mailfolder-Format trägt den
Namen Maildir. Auf anderen Systemen kann es sein, daß Mailfolder
anders organisiert sind.
Mails bestehen aus einer Reihe von Headerzeilen, dann folgt eine
Leerzeile und der eigentliche Inhalt der Mail. Der Header enthält
Dinge wie den Absender (eine Zeile, die mit ``From: '' beginnt) und
das Subject (eine Zeile, die mit ``Subject: '' beginnt) der Mail.
Eure Aufgabe ist es, ein Programm zu schreiben, das von allen Mails in
einem Folder folgende Informationen anzeigt:
- Das Subject (Subject:)
- Den Absender (From:)
- Ob die Mail neu oder bereits gelesen ist
- Die ersten drei Zeilen des Inhalts.
Dazu werden zwei Dinge benötigt:
- Das Auflisten aller Einträge(Dateien) in einem bestimmten Verzeichnis
(opendir, readdir und closedir).
- Das Lesen aus Dateien (fopen, fgets und fclose).
Um die Einträge in einem bestimmten Verzeichnis zu erhalten, muß
zuerst das Verzeichnis geöffnet werden. Dazu dient die Funktion
opendir. Übergibt man dieser Funktion den Namen eines
Verzeichnisses, dann liefert sie einen Zeiger auf eine Datenstruktur
vom Typ DIR zurück. Übergibt man diesen Zeiger an die Funktion
readdir, so erhält man bei jedem Aufruf einen Zeiger auf eine
Struktur vom Typ struct dirent (man dirent). Diese Struktur enthält
im Feld d_name den Namen des jeweils nächsten Verzeichniseintrags.
Am Ende sollte das Verzeichnis mit der Funktion closedir wieder
geschlossen werden.
Wie aus Modula oder Oberon bekannt, muß eine Datei zunächst geöffnet
werden. Dazu dient die Funktion fopen(3C). Neben dem Pfadnamen der
Datei muß dieser Funktion noch ein zweiter String übergeben werden, der
angibt, ob die Datei zum Lesen (``r'') oder zum Schreiben (``w'') geöffnet
wird. Der Rückgabewert von fopen ist ein Zeiger auf eine Struktur
vom Typ FILE. Dieser Zeiger kann z.B. an fgets oder
fscanf übergeben werden, um anzugeben, aus welcher Datei gelesen
werden soll. Zum Schluß sollte eine geöffnete Datei mit fclose
wieder geschlossen werden.
Christian Ehrhardt
2005-01-13