6.1.5 Verzeichnisdateien
-
Upload
maite-phelps -
Category
Documents
-
view
25 -
download
0
description
Transcript of 6.1.5 Verzeichnisdateien
bs-6 1
6.1.5 Verzeichnisdateien
Anstelle eines zentralen Verzeichnisses:
Menge von Verzeichnisdateien (directory files),die selbst in Verzeichnissen verzeichnet sind,
alle ab einem Wurzelverzeichnis (root directory) direkt oder indirekt erreichbar.
M.a.W.: Dateien bilden einen gerichteten Graphen,
meist zyklenfrei, häufig „Dateibaum“
bs-6 2
Vorteile:
strukturierter statt flacher Namensraum, mit effizienter Implementierung:
Dateien werden über Wegnamen im Graphen (Pfadnamen, path names) identifiziert, d.h.
Folgen von verzeichneten Namen, z.B. /b/23/x
bs-6 3
Vorteile:
strukturierter statt flacher Namensraum, mit effizienter Implementierung:
Dateien werden über Wegnamen im Graphen (Pfadnamen, path names) identifiziert, d.h.
Folgen von verzeichneten Namen, z.B. /b/23/x
Wurzel:
in Unix verboten (um Zyklen zuvermeiden, die die Dateispeicher-verwaltung erschweren)
aal
bx
b
x
123
blay
fritz
bs-6 4
Verzeichnisdateien sind Dateien –
und haben daher die normalen Attribute von Dateien:
differenzierter Zugriffsschutz
auf Teilbereiche des Namensraums
Verwaltung von Zugriffszeiten
für Teilbereiche des Namensraums
bs-6 5
Modell: Abbildung Zeichenkette Dateiverweis (6.1.3 )
Operationen: Einträge einfügen, suchen, ändern, löschen
(6.1.1 )
und auflisten ( = interner Iterator),
aber ohne dass dabei Dateiverweise
in die Hände des Benutzerprogramms
geraten (6.1.1.1).
bs-6 6
6.1.5.1 Aktuelle Verzeichnisse
(Unix:) Jedes Verzeichnis hat grundsätzlich
einen selbstbezüglichen Eintrag mit Namen "."
einen Eintrag für das Elternverzeichnis mit Namen ".."
(Unix:) Jeder Prozess hat Attribute
aktuelles Arbeitsverzeichnis (current working directory),
aktuelles Wurzelverzeichnis (current root directory),
bs-6 7
absoluter Wegname: beginnt mit '/' und wird relativ zum aktuellen Wurzelverzeichnis interpretiert
relativer Wegname: beginnt ohne '/' und wird relativ zumaktuellen Verzeichnis interpretiert,
z.B. aktuelles Verzeichnis:
/usr/lohr
Wegname tmp/bla.txt
bedeutet /usr/lohr/tmp/bla.txt
bs-6 8
chdir(path)
macht das Verzeichnis path zum aktuellen Verzeichnis
chroot(path)
macht das Verzeichnis path zum aktuellen Wurzelverzeichnis
(diese Systemfunktion ist dem
super-user root vorbehalten)
bs-6 9
6.1.5.2 Erzeugen eines Verzeichnisses
mkdir(path,mode)
erzeugt ein Verzeichnis path mit Schutzstatus mode;
das Verzeichnis ist leer – bis auf Einträge für
"." und ".."
bs-6 10
6.1.5.3 Einträge einfügen/löschen
link (path,..)creat(path,..) mkdir(path,..) ...
bewirken das Einfügen eines Eintrags (name,.)
in das Verzeichnis dir, wenn der angegebene
Wegname path so aussieht: "dir/name„
bs-6 11
unlink("dir/name")
löscht den Eintrag (name,.) im Verzeichnis dir
sofern name kein Verzeichnis ist
rmdir("dir/name")
löscht den Eintrag (name,.) im Verzeichnis dir
sofern name ein leeresVerzeichnis ist
(bis auf "." und ".." )
Zur Erinnerung: Ein Verzeichnis ist grundsätzlich nur über
einen Eintrag erreichbar.
bs-6 12
6.1.5.4 Einträge suchen/auflisten
file = lookup(path)
liefert Verweis auf die Datei path.
Achtung: diese Operation steht dem Benutzer nicht
zur Verfügung; sie wird nur innerhalb des
Betriebssystems benutzt,
insbesondere zum Auflösen von Wegnamen !
bs-6 13
list(path)
zur Auflistung der Einträge müsste als interner Iterator
konzipiert werden – ist aber nicht vorgesehen.
Stattdessen:
Verzeichnisdatei wird wie sequentielle Datei geöffnetund gelesen durch Dienstprogramm ls;
ls kennt die interne Repräsentation der Datei (!) undweiß daher, wo die Namen zu finden sind;
ls –l erfragt die Attribute der Dateien
bs-6 14
6.1.5.5 Einträge ändern
Unix: Jeder externe Datenträger enthält ein eigenes
Dateisystem mit eigener, „lokaler“ Wurzel
mount(device, path, readonly)
ersetzt den durch path identifizierten Dateiverweisdurch einen Verweis auf das Wurzelverzeichnisdes Dateisystems auf dem Gerät device
x y z
*
(aktuellesArbeitsverzeichnis:)
bs-6 15
6.1.5.5 Einträge ändern
Unix: Jeder externe Datenträger enthält ein eigenes
Dateisystem mit eigener, „lokaler“ Wurzel
mount(device, path, readonly)
ersetzt den durch path identifizierten Dateiverweisdurch einen Verweis auf das Wurzelverzeichnisdes Dateisystems auf dem Gerät device
x y z mount("/dev/fd0","z",0)
a b c
*
(aktuellesArbeitsverzeichnis:)
bs-6 16
! Der alte Dateiverweis geht nicht verloren:
umount(device)
macht mount(device,...) wieder rückgängig
! mount , umount stehen nur dem Super-User zur Verfügung !
In diesem Zusammenhang:
Bei link(path,alias)
müssen sich beide Argumente
auf das gleiche Dateisystem beziehen
bs-6 17
6.1.6 Indirekte Dateien
Indirekte Datei (soft link, symbolic link)
enthält statt regulärer Daten einen Wegnamen.Bezugnahme auf eine solche Datei wird alsBezugnahme auf die durch den Wegnamen benannte Datei interpretiert:
a
"x/a"
MyA
x
hard linksoft link
bs-6 18
symlink(path,alias)
erzeugt eine indirekte Datei mit Namen alias
und Inhalt path, z.B. symlink("x/a","MyA")– auch wenn path bereits eine indirekte Datei ist!
link(path,alias)
mit indirekter Datei path :erzeugt eine indirekte Datei mit Namen alias
und Inhalt von path
Bemerkungen:
Es gibt keine mehrfachen hard links auf soft links.
Es kann Ketten von indirekten Dateien geben.
Eine indirekte Datei kann auf eine nicht existierende Datei verweisen!
bs-6 19
Operationen auf einer indirekten Datei path selbst:
unlink(path)
wie unlink für normale Dateien; damit wird dieindirekte Datei gelöscht – denn es gibt keinemehrfachen hard links auf soft links
lstat(path,&buffer)
analog zu stat
readlink(path,&buffer,bufsize)
liefert den Wegnamen in der indirekten Datei
bs-6 20
6.1.7 Auflisten von Verzeichnissen
entweder mit Hilfe eines externen oder internen Iterators
oder durch ein Dienstprogramm (Unix: ls),
das das Verzeichnis als sequentielle Datei liest,
dessen interne Repräsentation kennt,
somit die Namen der Einträge auflisten kann
und mittels stat auch die Attribute der Dateien erfragen kann.
bs-6 21
jefe: ls -l
total 40
-rw------- 1 lohr institut 7342 Jun 16 20:50 Text
lrwxrwxrwx 1 lohr institut 4 Jun 16 21:00 alias -> Text
drwx------ 2 lohr institut 14 Jun 16 20:57 dir
-rw------- 3 lohr institut 266 Jun 16 21:18 foo
-rw------- 3 lohr institut 266 Jun 16 21:18 foo1
-rw------- 3 lohr institut 266 Jun 16 21:18 foo2
- sequentiell Eigner Eignergruppe Name Inhalt
l soft link letzte Änderungszeit
d Verzeichnis Größe in Bytes
Anzahl der hard links
bs-6 22
6.1.8 Dateisysteme in Programmiersprachen
sind ansprechbar über Modul/Klassen-Bibliotheken
Typische Leistung einer solchen Bibliothek:
Abstraktion von den spezifischen Systemaufrufendes unterliegenden Betriebssystems
Manipulation getypter Daten
bs-6 23
Java – einige wenige Beispiele aus java.io:
class File beinhaltet lediglich einen Wegnamenund erlaubt Abfragen über die sobenannte Datei – sofern vorhanden
abstract class InputStream
ist Oberklasse für diverse „ungetypte“– d.h. byteorientierte – Eingabeklassen
für sequentielles Lesen
class FileInputStream extends InputStream
ermöglicht das Lesen von Bytes und
Bytefolgen aus einer sequentiellen Datei
bs-6 24
class InputStreamReader extends Reader
liest Zeichenfolgen von einem
angegebenen InputStream
class DataOutputStream extends Writer
schreibt Daten aller primitivenTypen
in einen angegebenen OutputStream
class PrintWriter extends Writer
schreibt Daten aller Typen als
Zeichenketten in einen angegebenen
OutputStream