bs-6.1.5

Werbung
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
1
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
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
aal
Wurzel:
b
b
x
23
1
bs-6
fritz
x
y
bla
in Unix verboten (um Zyklen zu
vermeiden, die die Dateispeicherverwaltung erschweren)
3
 Verzeichnisdateien sind Dateien –
und haben daher die normalen Attribute von Dateien:

bs-6

differenzierter Zugriffsschutz
auf Teilbereiche des Namensraums

Verwaltung von Zugriffszeiten
für Teilbereiche des Namensraums
4
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
5
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
6
absoluter Wegname: beginnt mit '/' und wird relativ zum
aktuellen Wurzelverzeichnis interpretiert
relativer Wegname:
beginnt ohne '/' und wird relativ zum
aktuellen Verzeichnis interpretiert,
z.B. aktuelles Verzeichnis:
/usr/lohr
Wegname
bedeutet
bs-6
tmp/bla.txt
/usr/lohr/tmp/bla.txt
7
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
8
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
9
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
10
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:
bs-6
Ein Verzeichnis ist grundsätzlich nur über
einen Eintrag erreichbar.
11
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
12
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öffnet
und gelesen durch Dienstprogramm ls;
 ls kennt die interne Repräsentation der Datei (!) und
weiß daher, wo die Namen zu finden sind;
 ls –l erfragt die Attribute der Dateien
bs-6
13
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 Dateiverweis
durch einen Verweis auf das Wurzelverzeichnis
des Dateisystems auf dem Gerät device
(aktuelles
Arbeitsverzeichnis:)
x
y
z
*
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 Dateiverweis
durch einen Verweis auf das Wurzelverzeichnis
des Dateisystems auf dem Gerät device
(aktuelles
Arbeitsverzeichnis:)
x
y
z
mount("/dev/fd0","z",0)
*
bs-6
a
b
c
15
! 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
16
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 als
Bezugnahme auf die durch den Wegnamen
benannte Datei interpretiert:
x
soft link
hard link
"x/a"
a
MyA
bs-6
17
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:



bs-6
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!
18
Operationen auf einer indirekten Datei path selbst:
unlink(path)
wie unlink für normale Dateien; damit wird die
indirekte Datei gelöscht – denn es gibt keine
mehrfachen hard links auf soft links
lstat(path,&buffer)
analog zu stat
readlink(path,&buffer,bufsize)
liefert den Wegnamen in der indirekten Datei
bs-6
19
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
20
jefe: ls -l
total 40
-rw------lrwxrwxrwx
drwx------rw-------rw-------rw-------
1
1
2
3
3
3
lohr
lohr
lohr
lohr
lohr
lohr
institut
institut
institut
institut
institut
institut
7342
4
14
266
266
266
Jun
Jun
Jun
Jun
Jun
Jun
16
16
16
16
16
16
20:50
21:00
20:57
21:18
21:18
21:18
Text
alias -> Text
dir
foo
foo1
foo2
- sequentiell
Eigner
Eignergruppe
Name
l soft link
letzte Änderungszeit
d Verzeichnis
Größe in Bytes
Anzahl der hard links
bs-6
Inhalt
21
6.1.8 Dateisysteme in Programmiersprachen
sind ansprechbar über Modul/Klassen-Bibliotheken
Typische Leistung einer solchen Bibliothek:
 Abstraktion von den spezifischen Systemaufrufen
des unterliegenden Betriebssystems
 Manipulation getypter Daten
bs-6
22
Java – einige wenige Beispiele aus java.io:
class File
beinhaltet lediglich einen Wegnamen
und erlaubt Abfragen über die so
benannte 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
23
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
bs-6
24
Herunterladen