Hintergrundspeicher (Secondary storage) Katalog. SPiC

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

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

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

18.1 Überblick Überblick (3)

Übungen zu Systemnahe Programmierung in C (SPiC)

U6 Verzeichnisse und Sortieren U6 Verzeichnisse und Sortieren

Input, Output, Dateien

Programmiersprachen Einführung in C

U6-1 Linux-Benutzerumgebung

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

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

Übungen zu Systemnahe Programmierung in C (SPiC)

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

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

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

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

Arrays (Felder/Vektoren)

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

6.2 Extras/Lesen aus Dateien

Dateizugriff unter C

Ausgewählte Bibliotheksfunktionen

Programmiersprachen Einführung in C

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

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

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

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

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.

Ein- und Ausgabe mit Dateien

Ein- und Ausgabe mit Dateien

Tafelübung zu BS 4. Dateioperationen

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

Umgebung, Ein- und Ausgabe

Algorithmen & Programmierung. Persistenz - Arbeit mit Dateien

Programmiersprachen Einführung in C

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

Übungspaket 30 Kopieren von Dateien

6.1.5 Verzeichnisdateien

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

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

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

GI Vektoren

Programmieren in C/C++ und MATLAB

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

9. Dateisysteme. Betriebssysteme Harald Kosch Seite 164

Modellierung und Programmierung

D.2 Sonderzeichen (2)

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

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

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

Systeme 1. Kapitel 3 Dateisysteme WS 2009/10 1

Praxis der Programmierung

Grundlagen der Programmierung

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

Übungspaket 30 Kopieren von Dateien

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

Organisatorisches. Übungsleiter: Karsten Otto Homepage: Aufgaben

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

Übersicht. Informatik 1 Teil 10 Dateien

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

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

Grundlagen der Informatik

Ein- und Ausgabeumlenkung

6 Ein- und Ausgabe. Bisher war unsere (Bildschirm-) Ausgabe leichtflüchtig (

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

Eine Mini-Shell als Literate Program

Unix Grundlagen. - ii - Ambit Professional Seminar Series. Autor: Prof. J. Anton Illik Diplom-Informatiker

Anwendung höherer Programmiersprachen. Formatierte Ausgabe mit cout. Angewandte Informatik I C / C++ Teil B: Formatierte Ein- und Ausgabe

Herzlich willkommen!

Dateien. INE2 M. Thaler, Office TG208. ZHAW, M. Thaler, K. Rege, G. Burkert

+ C - Formatierte Eingabe mit scanf()

Einführung Programmierpraktikum C Michael Zwick

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

2. Interaktive Web Seiten. action in Formularen. Formular. Superglobale Variablen $ POST, $ GET und $ REQUEST. GET und POST

Arbeiten mit der Shell Teil 2

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

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Arbeiten mit der Shell Teil 2

C Überlebenstraining

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Zeichenketten (1) Literale von Zeichenketten werden in doppelte Anführungszeichen gesetzt

Die Programmiersprache C

Ein- und Ausgabe von Daten

Betriebssysteme 1. Thomas Kolarz. Folie 1

Konzepte von Betriebssystem-Komponenten. I/O: von der Platte zur Anwendung

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

Einführung in C. EDV1-04C-Einführung 1

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Dr. Monika Meiler. Inhalt

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

1. Allgemeine Datei (Binärdatei mit formatierten Inhalt)

FILE *fp; char fname[100];... fp = fopen (fname, rb ); if( fp == NULL ) { perror( fopen );... } // Fehlernachricht auf letzten Fehler, der aufkam

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

Programmierung mit C Datei-Ein- und Ausgabe

Praktikum Betriebssysteme 1. Aufgabe (1)

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Grundlagen der Programmierung

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

C-Crashkurs. Praktikum Systemmanagement und Sicherheit

Inhalte. Einführung. Algorithmus, Programmiersprache, Compiler und Linker. Kontrollstrukturen. Präprozessoranweisungen. Libraries

Transkript:

J Dateisysteme J Dateisysteme J.2 Allgemeine Konzepte (3) J.2 Allgemeine Konzepte (2) J.1 Allgemeine Konzepte Einordnung Prozessor (CPU, Central processing unit) Datei speichert Daten oder Programme Katalog / Verzeichnis (Directory) erlaubt Benennung der Dateien enthält Zusatzinformationen zu Dateien Hauptspeicher (Memory) Ein-, Ausgabegeräte/ Periphere Geräte (I/O Devices) Partitionen eine Menge von Katalogen und deren Dateien sie dienen zum physischen oder logischen Trennen von Dateimengen. externe Schnittstellen (Interfaces) Hintergrundspeicher (Secondary storage) Katalog Dateien Partition J.1 J.3 J.2 Allgemeine Konzepte (2) J.2 Allgemeine Konzepte (2) Dateisysteme speichern Daten und Programme persistent in Dateien Betriebssystemabstraktion zur Nutzung von Hintergrundspeichern (z.b. Platten, CD-ROM, Bandlaufwerke) 1 Überblick E-/A-Funktionalität nicht Teil der Programmiersprache Benutzer muss sich nicht um die Ansteuerungen verschiedener Speichermedien kümmern einheitliche Sicht auf den Hintergrundspeicher Dateisysteme bestehen aus Dateien (Files) Katalogen (Directories) Realisisierung durch "normale" Funktionen Bestandteil der Standard-Funktionsbibliothek einfache Programmierschnittstelle effizient portabel betriebssystemnah Partitionen (Partitions) Funktionsumfang Öffnen/Schließen von Dateien Lesen/Schreiben von Zeichen, Zeilen oder beliebigen Datenblöcken J.2 Formatierte Ein-/Ausgabe J.4

2 Standard Ein-/Ausgabe 3 Öffnen und Schließen von Dateien (2) 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! J.5 Beispiel: #include <stdio.h> main(void) { 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 J.7 3 Öffnen und Schließen von Dateien 4 Zeichenweise Lesen und Schreiben 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 J.6 Lesen eines einzelnen Zeichens von der Standardeingabe int getchar( ) 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) von einem Dateikanal schreiben das im Parameter c übergeben Zeichen int getc(file *fp ) auf einen Dateikanal int putc(int c, FILE *fp ) geben gleichzeitig das geschriebene Zeichen als Ergebnis zurück J.8

4 Zeichenweise Lesen und Schreiben (2) Beispiel: copy-programm #include <stdio.h> main(int argc, char *argv[]) { 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 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) J.9 J.11 4 Zeichenweise Lesen und Schreiben (3) Beispiel: copy-programm Fortsetzung /* */ while ( (c = getc(quelle))!= EOF ) { putc(c, ziel); fclose(quelle); fclose(ziel); Teil 2: kopieren J.10 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 J.12

5 Formatierte Eingabe Funktionen 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 J.13 5 Formatierte Eingabe Format-Anweisungen %d int %hd %ld %lld short long int %f float %lf %Lf long long int double long double analog auch %e oder %g %c char %s String, wird automatisch mit \0 abgeschl. nach % kann eine Zahl folgen, die die maximale Feldbreite angibt %3d = 3 Ziffern lesen %5c = 5 char lesen (Parameter muß dann Zeiger auf char-feld sein) %5c überträgt exakt 5 char (hängt aber kein \0 an!) %5s liest max. 5 char (bis white space) und hängt \0 an Beispiele: int a, b, c, d, n; char s1[20]="xxxxxx", s2[20]; n = scanf("%d %2d %3d %5c %s %d", &a, &b, &c, s1, s2, &d); Eingabe: 12 1234567 sowas hmm Ergebnis: n=5, a=12, b=12, c=345 s1="67 sox", s2="was" J.15 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 J.14 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!) J.16

1 Pfadnamen 2 Programmierschnittstelle für Kataloge Baumstruktur Kataloge verwalten / Erzeugen etc home passwd eva heinz usr tmp int mkdir( const char *path, mode_t mode ); Löschen int rmdir( const char *path ); aktueller Katalog Pfade datei z.b. /home/heinz/datei, /tmp,../heinz/datei / ist Trennsymbol (Slash); beginnender / bezeichnet Wurzelkatalog; sonst Beginn implizit mit dem aktuellem Katalog 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 ); J.17 "eigentliche" Systemschnittstelle (open, getdents) wird normalerweise nicht direkt verwendet J.19 1 Pfadnamen (2) 2 Kataloge (2): opendir / closedir Eigentliche Baumstruktur /... home... eva heinz..... datei1 datei2 benannt sind nicht Dateien und Kataloge, sondern die Verbindungen 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 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 J.18 J.20

2 Kataloge (3): readdir 4 Inodes 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 Bibliothek wieder verwendet! J.21 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) 10 7 5. 2.. 10. 6. 2. 10 eva 5.. Text in 5.. 2.. 6 heinz 7 dat1 Datei 7 dat2 5 home 5 6 2 J.23 2 Kataloge (4): struct dirent 4 Inodes (2) 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 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 siehe C-Ein/Ausgabe (Schnittstelle der C-Bibliothek) C-Funktionen (fopen, printf, scanf, getchar, fputs, fclose, ) verbergen die "eigentliche Systemschnittstelle und bieten mehr "Komfort" open, close, read, write J.22 J.24

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); J.25 K letzte Infos / Organisatorisches K letzte Infos / Organisatorisches ab 30.06 bis 19.07 nur noch Übungsbetrieb (2 Std Tafelüb. + mind. 2 Std. Rechnerüb.) zur Besprechung und Bearbeitung der Aufgaben 6 und 7 alte Klausuren über Web-Seite verfügbar Klausurtermin Freitag, 25.07.2008 (für alle Studiengänge) Uhrzeit steht noch nicht fest ( Webseite) Prüfung im Oktober in begründeten Ausnahmefällen möglich Fragestunden am Anfang der Klausurwoche vorraussichtlich am Dienstag 22.07. Uhrzeit steht noch nicht fest ( Webseite) Klausurvorbereitung außerdem in der letzten Übungswoche weitere Details und Termine auf den Webseiten zur Vorlesung K.26