6 1 5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses

  • Slides: 24
Download presentation
6. 1. 5 Verzeichnisdateien Anstelle eines zentralen Verzeichnisses: Menge von Verzeichnisdateien (directory files), die

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

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

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: aal b b x 23 1 bs-6 fritz x y bla in Unix verboten (um Zyklen zu vermeiden, die Dateispeicherverwaltung erschweren) 3

 Verzeichnisdateien sind Dateien – und haben daher die normalen Attribute von Dateien: bs-6

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

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

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:

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

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

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

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

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 leeres. Verzeichnis 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

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

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

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

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/fd 0", "z", 0) * bs-6 a b c 15

! Der alte Dateiverweis geht nicht verloren: umount(device) macht mount(device, . . . )

! 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

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 bs-6 My. A 17

symlink(path, alias) erzeugt eine indirekte Datei mit Namen alias und Inhalt path, z. B.

symlink(path, alias) erzeugt eine indirekte Datei mit Namen alias und Inhalt path, z. B. symlink("x/a", "My. A") – 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

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

6. 1. 7 Auflisten von Verzeichnissen entweder mit Hilfe eines externen oder internen Iterators oder durch ein Dienstprogramm (Unix: ls), bs-6 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. 20

jefe: ls -l total 40 -rw------lrwxrwxrwx drwx------rw-------rw------- - sequentiell l soft link d Verzeichnis

jefe: ls -l total 40 -rw------lrwxrwxrwx drwx------rw-------rw------- - sequentiell l soft link d Verzeichnis 1 1 2 3 3 3 lohr lohr institut institut 7342 4 14 266 266 Eignergruppe Jun Jun Jun 16 16 16 20: 50 21: 00 20: 57 21: 18 Text alias -> Text dir foo 1 foo 2 Name letzte Änderungszeit Größe in Bytes Inhalt Anzahl der hard links bs-6 21

6. 1. 8 Dateisysteme in Programmiersprachen sind ansprechbar über Modul/Klassen-Bibliotheken Typische Leistung einer solchen

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

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 Input. Stream ist Oberklasse für diverse „ungetypte“ – d. h. byteorientierte – Eingabeklassen für sequentielles Lesen class File. Input. Stream extends Input. Stream ermöglicht das Lesen von Bytes und Bytefolgen aus einer sequentiellen Datei bs-6 23

class Input. Stream. Reader extends Reader liest Zeichenfolgen von einem angegebenen Input. Stream class

class Input. Stream. Reader extends Reader liest Zeichenfolgen von einem angegebenen Input. Stream class Data. Output. Stream extends Writer schreibt Daten aller primitiven. Typen in einen angegebenen Output. Stream class Print. Writer extends Writer schreibt Daten aller Typen als Zeichenketten in einen angegebenen Output. Stream bs-6 24