I Dateisysteme. I.1 Allgemeine Konzepte. Einordnung. Prozessor (CPU, Central processing unit) Ein-, Ausgabegeräte/ Periphere Geräte (I/O Devices)

Ähnliche Dokumente
E-/A-Funktionalität nicht Teil der Programmiersprache

Hintergrundspeicher (Secondary storage) Katalog. SPiC

Strukturen können wie normale Variablen an Funktionen übergeben werden. Strukturen können auch Ergebnis einer Funktion sein

Wie man das Dateisystem in Deutschland versteht

E.1 Allgemeine Konzepte (3) E.1 Allgemeine Konzepte (2) E.1 Allgemeine Konzepte. Datei. Einordnung. Katalog / Verzeichnis

Überblick: Teil D Betriebssystemabstraktionen

18.1 Überblick Überblick (3)

U5 Verzeichnisse und Sortieren

16 Felder von Zeigern

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Dateikanäle. Inhalt. Dateien & Dateikanäle Dateikanäle Ein-/Ausgaben

Übungen zu Systemnahe Programmierung in C (SPiC) Sommersemester 2018

Übungen zu Systemnahe Programmierung in C (SPiC)

Ein-/Ausgabe, Dateisystem. Kapitel 9: Ein-/Ausgabe. Programmieren in C für Elektrotechniker. Programmieren in C. Dateisystem. Programmieren in C

U6 Verzeichnisse und Sortieren

Übungen zu Systemnahe Programmierung in C (SPiC) Wintersemester 2017/18

U6-1 Linux-Benutzerumgebung

U6-1 Linux-Benutzerumgebung

U6 Verzeichnisse und Sortieren U6 Verzeichnisse und Sortieren

a.h a.c #include "a.h" #include "b.h" int a; int b; static int d; b.c #include "a.h" #include "b.h" b.h #ifnedef B_H #define B_H #include "a.

Input, Output, Dateien

Übungen zu Systemnahe Programmierung in C (SPiC)

Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2013

4.3 Directories / Filesysteme

Programmiersprachen Einführung in C

Systemnahe Programmierung in C (SPiC)

Kompaktkurs Einführung in die Programmierung. 11. Ein- und Ausgabe

file:///h:/dokumente/_fh/ ws /etinfoii/vorlesung/infoii...

high level I/O/ low level I/O

Dateien (1) Datenströme

Dateizugriff unter C

Programmiertechnik 1. Unit 12: Programmiersprache C - Betriebssystemschnittstellen. Andreas Polze 1

8. Arbeiten mit Dateien

Einführung in die Programmierung für Physiker. Die Programmiersprache C Ein- und Ausgabe

Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung.

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

Programmiersprachen Einführung in C

5. Dateioperationen. Tafelübung zu BSRvS1. Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

Grundlagen der Informatik für Ingenieure I. Background: 4. Dateisystem/Betriebssystemschnittstelle

6.2 Extras/Lesen aus Dateien

File I/O. Persistieren von Daten. Gastvorlesung Ralph Erdt erdt (bei) informatik.fh-wiesbaden.de

Ausgewählte Bibliotheksfunktionen

C Grundlagen. C.2 Programm. C.3 Beispiel (1) Polynomberechnung. C.1 Programmierung

Beispiel / Übung: Prof. Dr. A. Christidis WS 2012/13

Inhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling

Algorithmen & Programmierung. Persistenz - Arbeit mit Dateien

Umgebung, Ein- und Ausgabe

Ulrich Stein

Programmieren in C. Die C-Standardbibliothek: Datei Ein- und Ausgabe. Prof. Dr. Nikolaus Wulff

Ein- und Ausgabe mit Dateien

182. stdio stdio. Eingabe. Ausgabe. Typisch für Zeileneingabe und Analyse: #include <stdio.h>

Dateioperationen Fachhochschule Würzburg-Schweinfurt Prof. Dr. Martin Ochs. Abspeichern und Einlesen von Texten (Strings) in Dateien

Michael Dienert. 8. Dezember 2016

6.1.5 Verzeichnisdateien

Ein- und Ausgabe mit Dateien

Programmierkurs Kapitel 4: Dateien Seite 1. Verwaltungfeld im Speicher. 4.1 Alternativen zur Programmierung der Eingabe und der Ausgabe

D.2 Sonderzeichen (2)

Tafelübung zu BS 5. Dateioperationen

Die elementare Ausgabe von Daten auf externe Medien, wie Dateien und das Einlesen davon wird demonstriert.

9. Dateisysteme. Betriebssysteme Harald Kosch Seite 164

GI Vektoren

Grundlagen der Informatik für Ingenieure I. Background: 4. Dateisystem/Betriebssystemschnittstelle

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

Programmiersprachen Einführung in C

Betriebssysteme. Tafelübung 5. Dateioperationen. Daniel Friesel.

Tafelübung zu BS 4. Dateioperationen

Arrays (Felder/Vektoren)

Übungspaket 30 Kopieren von Dateien

Programmieren in C/C++ und MATLAB

Ein- und Ausgabeumlenkung

Systeme 1. Kapitel 3 Dateisysteme WS 2009/10 1

Eine Mini-Shell als Literate Program

Linux. Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm. FB Automatisierung und Informatik.

Linux. Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm. Hochschule Harz. FB Automatisierung und Informatik.

FH München, FB 03 FA WS 06/07. Ingenieurinformatik. Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 WIng Bachelor 6. Aufgabenblatt Zeiger, verkettete Liste, Dateieingabe und -ausgabe

+ C - Formatierte Eingabe mit scanf()

Grundlagen der Informatik

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

Dateien. INE2, Mittwoch / TE402 M. Thaler, Office TG208. ZHAW, M. Thaler, K. Rege, G.

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 23

Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Ab einer bestimmten Position wird der Inhalt entfernt (evtl. kann nur der Gesamtinhalt gelöscht werden) Anpassung der betroffenen Attribute

Modellierung und Programmierung

Einführung in die Programmiersprache C

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

stattdessen: geräteunabhängiges, abstraktes Format für Speicherung und Transfer von Daten Datei

Betriebssysteme 1. Thomas Kolarz. Folie 1

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

UNIX/Linux Lösung. Mär 14, 17 20:40 Seite 1/6. Prozeßsynchronisation (was ist das?, wo kommt es vor?, Beispiel?):

Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 EIT Bachelor 5. Aufgabenblatt Datenstruktur, Dateieingabe und -ausgabe

UNIX/Linux Lösung. Mär 08, 16 16:11 Seite 1/6

Übungspaket 30 Kopieren von Dateien

Lesen Sie alle Aufgabenstellungen sorgfältig durch, bevor Sie mit der Bearbeitung der ersten Aufgabe beginnen.

Transkript:

I Dateisysteme I Dateisysteme I.1 Allgemeine Konzepte Einordnung Prozessor (CPU, Central processing unit) Hauptspeicher (Memory) Ein-, Ausgabegeräte/ Periphere Geräte (I/O Devices) externe Schnittstellen (Interfaces) Hintergrundspeicher (Secondary storage) I.1

I.2 Allgemeine Konzepte (2) I.2 Allgemeine Konzepte (2) Dateisysteme speichern Daten und Programme persistent in Dateien Betriebssystemabstraktion zur Nutzung von Hintergrundspeichern (z.b. Platten, CD-ROM, Bandlaufwerke) Benutzer muss sich nicht um die Ansteuerungen verschiedener Speichermedien kümmern einheitliche Sicht auf den Hintergrundspeicher Dateisysteme bestehen aus Dateien (Files) Katalogen (Directories) Partitionen (Partitions) I.2

I.2 Allgemeine Konzepte (3) I.2 Allgemeine Konzepte (2) Datei speichert Daten oder Programme Katalog / Verzeichnis (Directory) erlaubt Benennung der Dateien enthält Zusatzinformationen zu Dateien Partitionen eine Menge von Katalogen und deren Dateien sie dienen zum physischen oder logischen Trennen von Dateimengen. Katalog Dateien Partition I.3

I.3 Ein-/Ausgabe in C-Programmen I.3 Ein-/Ausgabe in C-Programmen 1 Überblick E-/A-Funktionalität nicht Teil der Programmiersprache Realisisierung durch "normale" Funktionen Bestandteil der Standard-Funktionsbibliothek einfache Programmierschnittstelle effizient portabel betriebssystemnah Funktionsumfang Öffnen/Schließen von Dateien Lesen/Schreiben von Zeichen, Zeilen oder beliebigen Datenblöcken Formatierte Ein-/Ausgabe I.4

2 Standard Ein-/Ausgabe I.3 Ein-/Ausgabe in C-Programmen Jedes C-Programm erhält beim Start automatisch 3 E-/A-Kanäle: stdin Standardeingabe normalerweise mit der Tastatur verbunden, Umlenkung durch < Dateiende (EOF) wird durch Eingabe von CTRL-D am Zeilenanfang signalisiert stdout Standardausgabe normalerweise mit dem Bildschirm (bzw. dem Fenster, in dem das Programm gestartet wurde) verbunden, Umlenkung durch > stderr Ausgabekanal für Fehlermeldungen normalerweise ebenfalls mit Bildschirm verbunden automatische Pufferung Eingabe von der Tastatur wird normalerweise vom Betriebssystem zeilenweise zwischengespeichert und erst bei einem NEWLINE-Zeichen ( \n ) an das Programm übergeben! I.5

3 Öffnen und Schließen von Dateien I.3 Ein-/Ausgabe in C-Programmen Neben den Standard-E/A-Kanälen kann ein Programm selbst weitere E/A-Kanäle öffnen Zugriff auf Dateien Öffnen eines E/A-Kanals Funktion fopen Prototyp: FILE *fopen(char *name, char *mode); name mode Pfadname der zu öffnenden Datei Art, wie die Datei geöffnet werden soll "r" zum Lesen "w" zum Schreiben "a" append: Öffnen zum Schreiben am Dateiende "rw" zum Lesen und Schreiben Ergebnis von fopen: Zeiger auf einen Datentyp FILE, der einen Dateikanal beschreibt im Fehlerfall wird ein NULL-Zeiger geliefert I.6

I.3 Ein-/Ausgabe in C-Programmen 3 Öffnen und Schließen von Dateien (2) Beispiel: #include <stdio.h> int main() { FILE *eingabe; char dateiname[256]; printf("dateiname: "); scanf("%s\n", dateiname); if ((eingabe = fopen(dateiname, "r")) == NULL) { /* eingabe konnte nicht geoeffnet werden */ perror(dateiname);/* Fehlermeldung ausgeben */ exit(1); /* Programm abbrechen */ }... /* Programm kann jetzt von eingabe lesen */... /* z. B. mit c = getc(eingabe) */ Schließen eines E/A-Kanals int fclose(file *fp) schließt E/A-Kanal fp I.7

4 Zeichenweise Lesen und Schreiben I.3 Ein-/Ausgabe in C-Programmen Lesen eines einzelnen Zeichens von der Standardeingabe int getchar( ) von einem Dateikanal int getc(file *fp ) lesen das nächste Zeichen geben das gelesene Zeichen als int-wert zurück geben bei Eingabe von CTRL-D bzw. am Ende der Datei EOF als Ergebnis zurück Schreiben eines einzelnen Zeichens auf die Standardausgabe int putchar(int c) auf einen Dateikanal int putc(int c, FILE *fp ) schreiben das im Parameter c übergeben Zeichen geben gleichzeitig das geschriebene Zeichen als Ergebnis zurück I.8

I.3 Ein-/Ausgabe in C-Programmen 4 Zeichenweise Lesen und Schreiben (2) Beispiel: copy-programm #include <stdio.h> int main() { FILE *quelle; FILE *ziel; char quelldatei[256], zieldatei[256]; int c; /* gerade kopiertes Zeichen */ printf("quelldatei und Zieldatei eingeben: "); scanf("%s %s\n", quelldatei, zieldatei); if ((quelle = fopen(quelldatei, "r")) == NULL) { perror(quelldatei);/* Fehlermeldung ausgeben */ exit(1); /* Programm abbrechen */ } if ((ziel = fopen(zieldatei, "w")) == NULL) { perror(zieldatei);/* Fehlermeldung ausgeben */ exit(1); /* Programm abbrechen */ } /*... */ Teil 1: Dateien öffnen I.9

I.3 Ein-/Ausgabe in C-Programmen 4 Zeichenweise Lesen und Schreiben (3) Beispiel: copy-programm Fortsetzung /*... */ while ( (c = getc(quelle))!= EOF ) { putc(c, ziel); } Teil 2: kopieren } fclose(quelle); fclose(ziel); I.10

I.3 Ein-/Ausgabe in C-Programmen 5 Formatierte Ausgabe Funktionen Bibliotheksfunktionen Prototypen (Schnittstelle) int printf(char *format, /* Parameter */... ); int fprintf(file *fp, char *format, /* Parameter */... ); int sprintf(char *s, char *format, /* Parameter */...); int snprintf(char *s, int n, char *format, /* Parameter */...); Die statt... angegebenen Parameter werden entsprechend der Angaben im format-string ausgegeben bei printf auf der Standardausgabe bei fprintf auf dem Dateikanal fp (für fp kann auch stdout oder stderr eingesetzt werden) sprintf schreibt die Ausgabe in das char-feld s (achtet dabei aber nicht auf das Feldende -> potentielle Sicherheitsprobleme!) snprintf arbeitet analog, schreibt aber maximal nur n Zeichen (n sollte natürlich nicht größer als die Feldgröße sein) I.11

I.3 Ein-/Ausgabe in C-Programmen 5 Formatierte Ausgabe Formatangaben Zeichen im format-string können verschiedene Bedeutung haben normale Zeichen: Escape-Zeichen: werden einfach auf die Ausgabe kopiert z. B. \n oder \t, werden durch die entsprechenden Zeichen (hier Zeilenvorschub bzw. Tabulator) bei der Ausgabe ersetzt Format-Anweisungen: beginnen mit %-Zeichen und beschreiben, wie der dazugehörige Parameter in der Liste nach dem format-string aufbereitet werden soll Format-Anweisungen %d, %i int Parameter als Dezimalzahl ausgeben %f float oder double Parameter wird als Fließkommazahl (z. B. 271.456789) ausgegeben %e float oder double Parameter wird als Fließkommazahl in 10er-Potenz-Schreibweise (z. B. 2.714567e+02) ausgegeben %c char-parameter wird als einzelnes Zeichen ausgegeben %s char-feld wird ausgegeben, bis \0 erreicht ist I.12

5 Formatierte Eingabe Funktionen I.3 Ein-/Ausgabe in C-Programmen Bibliotheksfunktionen Prototypen (Schnittstelle) int scanf(char *format, /* Parameter */...); int fscanf(file *fp, char *format, /* Parameter */...); int sscanf(char *s, const char *format, /* Parameter */...); Die Funktionen lesen Zeichen von stdin (scanf), fp (fscanf) bzw. aus dem char-feld s. format gibt an, welche Daten hiervon extrahiert und in welchen Datentyp konvertiert werden sollen Die folgenden Parameter sind Zeiger auf Variablen der passenden Datentypen (bzw. char-felder bei Format %s), in die die Resultate eingetragen werden relativ komplexe Funktionalität, hier nur Kurzüberblick für Details siehe Manual-Seiten I.13

I.3 Ein-/Ausgabe in C-Programmen 5 Formatierte Eingabe Bearbeitung der Eingabe-Daten White space (Space, Tabulator oder Newline \n) bildet jeweils die Grenze zwischen Daten, die interpretiert werden white space wird in beliebiger Menge einfach überlesen Ausnahme: bei Format-Anweisung %c wird auch white space eingelesen Alle anderen Daten in der Eingabe müssen zum format-string passen oder die Interpretation der Eingabe wird abgebrochen wenn im format-string normale Zeichen angegeben sind, müssen diese exakt so in der Eingabe auftauchen wenn im Format-String eine Format-Anweisung (%...) angegeben ist, muß in der Eingabe etwas hierauf passendes auftauchen diese Daten werden dann in den entsprechenden Typ konvertiert und über den zugehörigen Zeiger-Parameter der Variablen zugewiesen Die scanf-funktionen liefern als Ergebnis die Zahl der erfolgreich an die Parameter zugewiesenen Werte Detail siehe Manual-Seite (man scanf) I.14

I.4 Dateisystem am Beispiel Linux/UNIX I.4 Dateisystem am Beispiel Linux/UNIX Datei einfache, unstrukturierte Folge von Bytes beliebiger Inhalt; für das Betriebssystem ist der Inhalt transparent dynamisch erweiterbar Katalog baumförmig strukturiert Knoten des Baums sind Kataloge Blätter des Baums sind Verweise auf Dateien jedem UNIX-Prozess ist zu jeder Zeit ein aktueller Katalog (Current working directory) zugeordnet Partitionen jede Partition enthält einen eigenen Dateibaum Bäume der Partitionen werden durch "mounten" zu einem homogenen Dateibaum zusammengebaut (Grenzen für Anwender nicht sichtbar!) I.15

1 Pfadnamen I.4 Dateisystem am Beispiel Linux/UNIX Baumstruktur / etc home usr tmp...... passwd eva heinz...... aktueller Katalog datei... Pfade z.b. /home/heinz/datei, /tmp,../heinz/datei / ist Trennsymbol (Slash); beginnender / bezeichnet Wurzelkatalog; sonst Beginn implizit mit dem aktuellem Katalog I.16

1 Pfadnamen (2) I.4 Dateisystem am Beispiel Linux/UNIX Eigentliche Baumstruktur /... home... eva heinz........ datei1 datei2 benannt sind nicht Dateien und Kataloge, sondern die Verbindungen (Links) zwischen ihnen Kataloge und Dateien können auf verschiedenen Pfaden erreichbar sein z. B.../heinz/datei1 und /home/heinz/datei1 Jeder Katalog enthält einen Verweis auf sich selbst (.) und einen Verweis auf den darüberliegenden Katalog im Baum (..) Verweise auf Dateien I.17

I.4 Dateisystem am Beispiel Linux/UNIX 2 Programmierschnittstelle für Kataloge Kataloge verwalten Erzeugen int mkdir( const char *path, mode_t mode ); Löschen int rmdir( const char *path ); Kataloge lesen (Schnittstelle der C-Bibliothek) Katalog öffnen: DIR *opendir( const char *path ); Katalogeinträge lesen: struct dirent *readdir( DIR *dirp ); Katalog schließen: int closedir( DIR *dirp ); I.18

2 Kataloge (2): opendir / closedir I.4 Dateisystem am Beispiel Linux/UNIX Funktionsschnittstelle: #include <sys/types.h> #include <dirent.h> DIR *opendir(const char *dirname); int closedir(dir *dirp); Argument von opendir dirname: Verzeichnisname Rückgabewert: Zeiger auf Datenstruktur vom Typ DIR oder NULL I.19

2 Kataloge (3): readdir I.4 Dateisystem am Beispiel Linux/UNIX Funktionsschnittstelle: #include <sys/types.h> #include <dirent.h> struct dirent *readdir(dir *dirp); Argumente dirp: Zeiger auf DIR-Datenstruktur Rückgabewert: Zeiger auf Datenstruktur vom Typ struct dirent oder NULL wenn fertig oder Fehler (errno vorher auf 0 setzen!) Probleme: Der Speicher für struct dirent wird von der Funktion readdir beim nächsten Aufruf wieder verwendet! wenn Daten aus der Struktur (z. B. der Dateiname) länger benötigt werden, reicht es nicht, sich den zurückgegebenen Zeiger zu merken sondern es müssen die benötigten Daten kopiert werden I.20

2 Kataloge (4): struct dirent I.4 Dateisystem am Beispiel Linux/UNIX Definition unter Linux (/usr/include/bits/dirent.h) struct dirent { ino_t d_ino; off_t d_off; unsigned short int d_reclen; unsigned char d_type; char d_name[256]; }; 3 Programmierschnittstelle für Dateien siehe C-Ein/Ausgabe (Schnittstelle der C-Bibliothek) C-Funktionen (fopen, printf, scanf, getchar, fputs, fclose,...) verbergen die "eigentliche" Systemschnittstelle und bieten mehr "Komfort" Systemschnittstelle: open, close, read, write I.21

4 Inodes I.4 Dateisystem am Beispiel Linux/UNIX Attribute (Zugriffsrechte, Eigentümer, etc.) einer Datei und Ortsinformation über ihren Inhalt werden in Inodes gehalten Inodes werden pro Partition numeriert (Inode number) Kataloge enthalten lediglich Paare von Namen und Inode-Nummern Kataloge bilden einen hierarchischen Namensraum über einem eigentlich flachen Namensraum (durchnumerierte Dateien) 5 2 10 6 5. 2.. 10 eva 6 heinz 10 5 7... dat1 7 Text in Datei 6 5 7... dat2 2 2 5... home I.22

4 Inodes (2) I.4 Dateisystem am Beispiel Linux/UNIX Inhalt eines Inode Dateityp: Katalog, normale Datei, Spezialdatei (z.b. Gerät) Eigentümer und Gruppe Zugriffsrechte Zugriffszeiten: letzte Änderung (mtime), letzer Zugriff (atime), letzte Änderung des Inodes (ctime) Anzahl der Hard links auf den Inode Dateigröße (in Bytes) Adressen der Datenblöcke des Datei- oder Kataloginhalts I.23

I.4 Dateisystem am Beispiel Linux/UNIX 5 Inodes Programmierschnittstelle: stat / lstat liefert Datei-Attribute aus dem Inode Funktionsschnittstelle: #include <sys/types.h> #include <sys/stat.h> int stat(const char *path, struct stat *buf); int lstat(const char *path, struct stat *buf); Argumente: path: Dateiname buf: Zeiger auf Puffer, in den Inode-Informationen eingetragen werden Rückgabewert: 0 wenn OK, -1 wenn Fehler Beispiel: struct stat buf; stat("/etc/passwd", &buf); /* Fehlerabfrage... */ printf("inode-nummer: %d\n", buf.st_ino); I.24