V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016...

20
Übungen zu Systemprogrammierung 1 (SP1) Ü6 – Dateisystem Christian Eichler, Andreas Ziegler, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2017 – 03. bis 07. Juli 2017 http://www4.cs.fau.de/Lehre/SS17/V _ SP1 : 2014-05-10

Transcript of V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016...

Page 1: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Übungen zu Systemprogrammierung 1(SP1)

Ü6 – Dateisystem

Christian Eichler, Andreas Ziegler, Jürgen Kleinöder

Lehrstuhl für Informatik 4Verteilte Systeme und Betriebssysteme

Friedrich-Alexander-UniversitätErlangen-Nürnberg

SS 2017 – 03. bis 07. Juli 2017

http://www4.cs.fau.de/Lehre/SS17/V_SP1

:20

14-05-10

Page 2: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Agenda

7.1 Hinweise zur Evaluation7.2 (Mini-)Klausurvorbereitung7.3 Aufbau eines Dateisystems7.4 Dateisystem-Schnittstelle7.5 Wildcards7.6 Gelerntes anwenden

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem 7–2

:20

14-05-10

Page 3: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Hinweise zur Evaluation

ÜbungsevaluationBei Kommentaren, die sich auf einen bestimmten Übungsleiter beziehen,bitte dessen Namen in jedem Feld voranstellen

→ Kommentarfelder werden in der Auswertung durcheinandergewürfeltBitte Zusatzfragen (u.a. zu den Aufgabenstellungen) beantworten

Vorlesungsevaluation: „Dozent hat Vorlesung zu ... selbst gehalten“Dozenten sind Wolfgang Schröder-Preikschat und Jürgen KleinöderTechnisch bedingt wird in der Evaluation nur WolfgangSchröder-Preikschat als Dozent genanntBitte beide Dozenten bei der Beantwortung der Frage berücksichtigen

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.1 Hinweise zur Evaluation 7–3

eval1:

2017

-06-28

Page 4: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

(Mini-)Klausurvorbereitung

In den letzten beiden Semesterwochen: Klausurvorbereitung in derTafelübung zur Vorbereitung auf

die SP1-Klausur für Mathematiker, Technomathematiker und2-Fach-Bachelordie Miniklausur zu Beginn von SP2 für alle Anderen

Wir erarbeiten die Klausur Februar 2016 gemeinsamKlausur ist auf Übungsseite (SP1 ⇒ Übung ⇒ Folien) verlinktEine Vorbereitung der Klausur im Vorfeld der Tafelübung wird erwartet

Voraussichtlicher Klausurtermin: Dienstag, 01.08.2017

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.2 (Mini-)Klausurvorbereitung 7–4

exam

prep1:

2017

-06-28

Page 5: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Agenda

7.1 Hinweise zur Evaluation7.2 (Mini-)Klausurvorbereitung7.3 Aufbau eines Dateisystems7.4 Dateisystem-Schnittstelle7.5 Wildcards7.6 Gelerntes anwenden

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.3 Aufbau eines Dateisystems 7–5

:20

14-05-10

Page 6: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Dateien und Verzeichnisse (UNIX)

Datenstrukturen im Namensraum9 Dateisystem (file system)

Indexknotentabelle

Text & Daten

Symbol Nummer

Verzeichnis Datei

die Indexknotentabelle (inode table) ist ein statisches Feld (array)von Indexknoten und die zentrale Datenstruktur

ein Indexknoten ist Deskriptor insb. eines Verzeichnisses oder einer Dateidas Verzeichnis (directory) ist eine Abbildungstabelle, es übersetztsymbolisch repräsentierte Namen in Indexknotennummern

eine von der Namensverwaltung des Betriebssystems definierte Dateidie Datei (file) ist eine abgeschlossene Einheit zusammenhängenderDaten beliebiger Repräsentation, Struktur und Bedeutung

9Als Einheit auf demselben Medium (z.B. Ablagespeicher) abgelegt.c©wosch SP (SS 2015, B – VI.3) 2.2Dynamische Namensauflösung –Pfadnamen VI.3/22

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.3 Aufbau eines Dateisystems 7–6

:20

14-05-10

Page 7: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Dateien und Verzeichnisse (UNIX)

Verzeichniseintrag IIein Namenverzeichnis ist eine spezielle Datei der Namensverwaltung

drwxrwxr−−

2 (di_nlink)

Indexknoten

Inhalt

(di_nlink)

So lautet d

ie Antwort

auf alle Fr

agen!Indexknoten

Inhalt

hal42

..

.

11

13

−rw−r−−r−−1

Datei

Verzeichnis

das selbst einen Namen hat, dereinen Indexknoten bezeichnetüber eine Verknüpfung erreichbarist aus einem anderen VerzeichnisNamen getrennt von eventuellenDateiinhalten speichert

Verknüpfungen anlegen/löschen zukönnen, ist eine Berechtigung, diesich nur auf das Verzeichnis derbetreffenden Verknüpfungen bezieht!

Selbstreferenz („dot“, 13) und Elterverzeichnis („dot dot“, 11) gebenwenigstens zwei Verweise auf ein Verzeichnis

auch wenn das Verzeichnis selbst sonst keine weiteren Namen enthält

c©wosch SP (SS 2015, B – VI.3) 2.2Dynamische Namensauflösung –Pfadnamen VI.3/24

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.3 Aufbau eines Dateisystems 7–7

:20

14-05-10

Page 8: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Rechte auf Verzeichniseinträgen

UNIX sieht folgende Zugriffsrechte vor (davor die Darstellung desjeweiligen Rechts bei der Ausgabe des ls-Kommandos)r lesen (getrennt für User, Group und Others einstellbar)w schreiben (analog)x ausführen (bei regulären Dateien) bzw. Durchgriffsrecht (bei

Verzeichnissen)s setuid/setgid-Bit: bei einer ausführbaren Datei mit dem Laden der

Datei in einen Prozess (exec) erhält der Prozess die Benutzer (bzw.Gruppen)-Rechte des Dateieigentümers

s setgid-Bit: bei einem Verzeichnis: neue Dateien im Verzeichnis erbendie Gruppe des Verzeichnisses statt der des anlegenden Benutzers

t bei Verzeichnissen: es dürfen trotz Schreibrecht im Verzeichnis nureigene Dateien gelöscht werden

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.3 Aufbau eines Dateisystems 7–8

:20

14-05-10

Page 9: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Agenda

7.1 Hinweise zur Evaluation7.2 (Mini-)Klausurvorbereitung7.3 Aufbau eines Dateisystems7.4 Dateisystem-Schnittstelle7.5 Wildcards7.6 Gelerntes anwenden

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.4 Dateisystem-Schnittstelle 7–9

:20

14-05-10

Page 10: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Dateiinformationen auslesen

stat(2)/lstat(2) liefern Datei-Attribute aus dem Inode

Unterschiedliches Verhalten bei Symlinks:stat(2) folgt Symlinks (rekursiv) und liefert Informationen übers Ziellstat(2) liefert Informationen über den Symlink selber

Funktions-Prototypenint stat(const char *path, struct stat *buf);

int lstat(const char *path, struct stat *buf);

path: Dateinamebuf: Zeiger auf Puffer zum Speichern der Dateiinformationen

Für uns relevante Strukturkomponenten der struct stat:mode_t st_mode: Dateimode, u. a. Zugriffs-Bits und Dateityp

Zur Bestimmung des Dateitypes gibt es u. a. folgende Makros:S_ISREG, S_ISDIR, S_ISLNK

off_t st_size: Dateigröße in Bytes

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.4 Dateisystem-Schnittstelle 7–10

:20

14-05-10

Page 11: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Verzeichnisinhalte auslesen

DIR *opendir(const char *dirname);struct dirent *readdir(DIR *dirp);int closedir(DIR *dirp);

Die DIR-Struktur ist ein Iterator und speichert die jeweils aktuellePositionreaddir(3) liefert einen Verzeichniseintrag und setzt denDIR-Iterator auf den Folgeeintrag

Rückgabewert NULL im Fehlerfall oder wenn EOF erreicht wurdebei EOF bleibt errno unverändert, im Fehlerfall wird errno entsprechendgesetzt

closedir(3) gibt die belegten Ressourcen nach Ende derBearbeitung frei

opendir e = readdir e == NULL?

Eintrag e

bearbeitennein

closedirja

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.4 Dateisystem-Schnittstelle 7–11

:20

14-05-10

Page 12: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Aufbau der Struktur struct dirent

struct dirent {ino_t d_ino; /* inode number */off_t d_off; /* offset to the next dirent */unsigned short d_reclen; /* length of this record */unsigned char d_type; /* type of file; not supported

by all file system types */char d_name[256]; /* filename */

};

d_reclen: Tatsächliche Länge der Struktur inklusivedes Dateinamens

d_name: Name des Verzeichniseintragesd_type: Eventuell Dateityp

→ Nicht verwenden, da nicht von allenDateisystemen implementiert

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.4 Dateisystem-Schnittstelle 7–12

:20

14-05-10

Page 13: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Diskussion der Schnittstelle von readdir(3)

Der Speicher für die zurückgelieferte struct dirent wird von denBibliotheksfunktionen selbst angelegt und beim nächstenreaddir-Aufruf auf dem gleichen DIR-Iterator potentiell wiederverwendet!

werden Daten aus der dirent-Struktur länger benötigt, müssen sie vordem nächsten readdir-Aufruf kopiert werden

Konzeptionell schlechtaufrufende Funktion arbeitet mit Zeiger auf internen Speicher derreaddir-Funktion

In nebenläufigen Programmen nur bedingt einsetzbarman weiß evtl. nicht, wann der nächste readdir-Aufruf stattfindet

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.4 Dateisystem-Schnittstelle 7–13

:20

14-05-10

Page 14: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Vergleich: readdir(3) und stat(2)

Die problematische Rückgabe auf funktionsinternen Speicher wie beireaddir(3) gibt es bei stat(2) nicht

Grund: stat(2) ist ein Systemaufruf – Vorgehensweise wie beireaddir(3) wäre gar nicht möglich

Vergleiche Vorlesung B V.2 Seite 19ff.readdir(3) ist komplett auf Ebene 3 implementiert (Teil derStandard-C-Bibliothek/Laufzeitbibliothek)stat(2) ist (nur) ein Systemaufruf(-stumpf), die Funktion selbst istTeil des Betriebssystems (Ebene 2)

der logische Adressraum auf Ebene 3 (Anwendungsprogramm) istnur eine Teilmenge (oder sogar komplett disjunkt) von demlogischen Adressraum auf Ebene 2 (Betriebssystemkern)

Betriebssystemspeicher ist für Anwendung nicht sichtbar/zugreifbarFunktionen der Ebene 2 können keine Zeiger auf ihre internenDatenstrukturen an Ebene 3 zurückgeben

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.4 Dateisystem-Schnittstelle 7–14

:20

14-05-10

Page 15: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Agenda

7.1 Hinweise zur Evaluation7.2 (Mini-)Klausurvorbereitung7.3 Aufbau eines Dateisystems7.4 Dateisystem-Schnittstelle7.5 Wildcards7.6 Gelerntes anwenden

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.5 Wildcards 7–15

:20

14-05-10

Page 16: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Wildcards

... erlauben Beschreibung von Mustern für Pfadnamen* beliebiger Teilstring (inklusive leerer String)? genau ein beliebiges Zeichen

[a-d] ein Zeichen aus den Zeichen a - d[!a-d] ein Zeichen nicht aus den Zeichen a - dDie Erweiterung betrifft immer nur einzelne PfadkomponentenDateien, die mit einem ’.’ beginnen, müssen explizit getroffen werden

Weitere und ausführliche Beschreibung siehe glob(7)

Werden von der Shell expandiert, wenn im jeweiligen Verzeichnispassende Dateinamen existieren

Quoting notwendig, wenn Muster als Argument übergeben wird

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.5 Wildcards 7–16

:20

14-05-10

Page 17: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Fun with Wildcards

test* *test* test?.* t[1x].* t[!12].* .text*.text.c Xattest.doc Xt1.tar Xt2.txttest.c X Xtest2.c X X Xtx.map X X

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.5 Wildcards 7–17

:20

14-05-10

Page 18: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Wildcards auswerten

... mit der Funktion fnmatch(3)

int fnmatch(const char *pattern, const char *string, int flags);

Prüft, ob der String string zum Wildcard-Muster pattern passt

Flags (0 oder bitweises Oder von ein oder mehreren der Werte)FNM_PATHNAME: Ein Slash in string wird nur von einem Slash-Zeichen inpattern getroffen, nicht von einem Wildcard-ZeichenFNM_PERIOD: Ein führender Punkt in einer Pfadkomponente muss voneinem korrespondierenden Punkt in pattern getroffen werdenWeitere Flags siehe Man-Page

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.5 Wildcards 7–18

:20

14-05-10

Page 19: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Agenda

7.1 Hinweise zur Evaluation7.2 (Mini-)Klausurvorbereitung7.3 Aufbau eines Dateisystems7.4 Dateisystem-Schnittstelle7.5 Wildcards7.6 Gelerntes anwenden

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.6 Gelerntes anwenden 7–19

:20

14-05-10

Page 20: V SP1 - FAU · c Evaluation7 3 2017-06-28 eval1: rbereitung der auf und r Anderen Klausur 2016 gemeinsam (SP1 ) Übung ) verlinkt rtet raussichtlicher 7 c rbereitung 4 2017-06-28

Aktive Mitarbeit!

„Aufgabenstellung“

Ausgabe aller Dateinamen von symbolischen Verknüpfungen imaktuellen Verzeichnis

c© eic, az, jk SP1 (Ü6 | SS 2017) 7 Dateisystem | 7.6 Gelerntes anwenden 7–20

:20

14-05-10