+ All Categories
Home > Documents > Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien...

Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien...

Date post: 06-Apr-2015
Category:
Upload: fester-landfried
View: 107 times
Download: 2 times
Share this document with a friend
24
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“
Transcript
Page 1: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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“

Page 2: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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

Page 3: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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

Page 4: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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

Page 5: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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).

Page 6: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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),

Page 7: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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

Page 8: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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)

Page 9: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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 ".."

Page 10: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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„

Page 11: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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.

Page 12: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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 !

Page 13: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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

Page 14: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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:)

Page 15: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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:)

Page 16: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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

Page 17: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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

Page 18: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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!

Page 19: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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

Page 20: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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.

Page 21: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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

Page 22: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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

Page 23: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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

Page 24: Bs-61 6.1.5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die selbst in Verzeichnissen verzeichnet.

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


Recommended