Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Programmieren in C Dateien
Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ
2
Dateien 1 Grundlegender Datentyp FILE zugrundeliegendes Modell: stream
Daten- oder Bytestrom: Bytes werden sequentiell gepuffert gelesen / geschrieben Bsp: printf("HALLO, WELT"); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
3
Dateien 2 Files Dateien, Pipes, Geräte usw.
Bildschirm / Tastatur stdin, stdout, stderr Pipes (anonyme Pipes, FIFOs) Sockets (Netzwerkverbindungen) Drucker Tapes, Festplatte, USB-Stick usw. Effizient für „normale“, sequentielle Files Uneffizient z.B. für Datenbanken Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
4
Dateien 3 FILE *fopen(char *pn, char *mode)
öffnet Datei mit dem Pfadname pn und verbindet einen stream mit der Datei liefert einen Zeiger vom Typ FILE * auf den geöffneten stream mode gibt den Modus an: r, rb read - lesen, Datei muss existieren w, wb write - schreiben, Datei wird erzeugt, Dateilänge auf 0 gesetzt a, ab append - schreiben, anhängen r+, rb+ update - lesen+schreiben Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
5
Dateien 4 fopen() liefert NULL bei Fehler, Bsp: void perror(char *msg)
FILE *fp; fp = fopen("datei", "r"); if(fp == NULL) { perror("datei"); return(1); } void perror(char *msg) Gibt Systemfehlermeldung auf stderr aus int fclose(FILE *fp) schließt Verbindung zum stream fp Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
6
Dateien 5 int fprintf(FILE *fp, char *fmt, /* args */ ...)
formatiertes Schreiben auf stream fp liefert die Anzahl geschriebener Bytes printf() fprintf(stdout, ...) int fscanf(FILE *fp, char *fmt, /* args */ ...) formatiertes Lesen von stream fp liefert Anzahl gelesener Elemente scanf() fscanf(stdin, ...) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
7
Dateien 6 Zeichen-/Wort-Eingabefunktionen int fgetc(FILE *fp)
int getc(FILE *fp) Zeichen von stream fp lesen liefert gelesenes Zeichen, EOF bei Dateiende getchar() fgetc(stdin) oft als Makro implementiert int fgetw(FILE *fp) Wort (Integer) von stream fp lesen liefert gelesenen Integerwert, EOF bei Dateiende Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
8
Dateien 7 String-Eingabefunktionen
char *fgets(char *s, int n, FILE *fp) Zeile von fp in Puffer s lesen, maximal n Bytes liefert NULL bei Dateiende char *gets(char *s) Zeile von stdin in Puffer s einlesen NULL bei EOF Achtung: Keine Prüfung der Puffergröße Sicherer fgets() statt gets() verwenden Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
9
Dateien 8 Zeichen-/Wort-Ausgabefunktionen int fputc(int c, FILE *fp)
int putc(int c, FILE *fp) Zeichen c auf stream fp ausgeben liefert geschriebenes Zeichen, EOF bei Fehler putchar(c) fputc(c, stdout) oft als Makro implementiert int putw(int w, FILE *fp) Wort w (Integer) auf stream fp ausgeben liefert geschriebenes Wort, EOF bei Fehler Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
10
Dateien 9 String-Ausgabefunktionen int fputs(char *s, FILE *fp)
String s auf stream fp ausgeben, EOF bei Fehler int puts(char *s) String s auf stdout ausgeben, EOF bei Fehler Ausgabepuffer leeren int fflush(FILE *fp) schreibt Ausgabepuffer des stream fp liefert 0 bei Erfolg, -1 bei Fehler Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
11
Dateien 10 Beispiel: filecopy.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
12
Dateien 11 Beispiel: numcat.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
13
Dateien 12 Beispiel: revcat.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
14
Dateien 13 binäre Ein- und Ausgabefunktionen
size_t fread(void *p, size_t s, size_t n, FILE *fp) size_t fwrite(void *p, size_t s, size_t n, FILE *fp) Lesen/Schreiben von n Objekten der Größe s aus/in den Puffer p von/auf den stream fp liefert die Anzahl gelesener/geschriebener Objekte n bzw. -1 bei Fehler Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
15
Dateien 14 Positionierung in Dateien / streams
int fseek(FILE *fp, long o, int w) Setzt den Positionszeiger innerhalb des streams fp auf die neue Position w+o o (offset) gibt den Offset zu w an w (whence) gibt die Ausgangsposition an SEEK_SET Dateianfang + Offset o SEEK_CUR aktuelle Position + Offset o SEEK_END Dateiende + Offset o liefert 0 bei Erfolg, -1 im Fehlerfall Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
16
Dateien 15 long ftell(FILE *fp) void rewind(FILE *fp)
gibt den aktuellen Wert des Positionszeigers innerhalb der Datei fp aus liefert aktuelle Position vom Dateianfang an gesehen, im Fehlerfall -1 void rewind(FILE *fp) Positionszeiger der Datei fp auf Dateianfang rewind(fp) fseek(fp, 0, SEEK_SET) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
17
Dateien 16 Weitere Funktionen int rename(char *old, char *new)
Umbennenung von Datei old in new int remove(char *path) Löschen von Datei path Funktionen liefern 0 oder bei -1 bei Fehler int system(char *command) Ausführen des Strings command liefert -1 bei Fehler, 0, wenn Kommando ok Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
18
Dateien 17 Fehlerbehandlung int ferror(FILE *fp) int feof(FILE *fp)
liefert Wert != 0 bei Fehler in fp, sonst 0 int feof(FILE *fp) liefert Wert != 0 bei EOF in fp, sonst 0 int clearerr(FILE *fp) Setzt Fehler- und EOF-Indikator in fp zurück void perror(char *s) gibt Systemfehlermeldung auf stderr aus Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
19
Dateien 18 low-level Systemcalls
alle bisher bekannten Funktionen für Eingabe und Ausgabe auf streams / Dateien: arbeiten aus Effizienzgründen gepuffert nutzen für die tatsächlichen Eingabe- und Ausgabeoperationen low-level-Funktionen des Betriebssystems Systemaufrufe oder Systemcalls teilweise nach Posix genormt Unix / Linux ca. 300, Windows Vista geschätzt 360 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
20
Dateien 19 Bsp: Schichten im Betriebsystem
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
21
Dateien 20 Low-level IO-Funktionen int open(char *path, int flag)
int creat(char *path, mode_t mode) öffnen / erzeugen Datei mit Namen path liefern Filedescriptor (Integer), -1 bei Fehler int close(int fd) Schliessen der Datei mit Filedescriptor fd ssize_t read(int fd, void *b, size_t n) ssize_t write(int fd, void *b, size_t n) Lesen/Schreiben von n Bytes aus Puffer b auf fd Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
22
Dateien 21 Standardfiledeskriptoren FILE *fdopen(int fd, char *mode)
0 Standardeingabe stdin 1 Standardausgabe stdout 2 Standardfehlerausgabe stderr FILE *fdopen(int fd, char *mode) verbindet einen stream mit einem Filedeskriptor int fileno(FILE *fp) liefert Filedeskriptor zum stream fp Filedeskriptor ist Teil des FILE-Datentyps Zugriff durch Funktion fileno() gekapselt Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
23
Dateien 22 Diskussion Warum Pufferung von IO?
Warum Schichtung Anwendungs-/Systemebene? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
24
Dateien 23 Beispiel: bytecopy1.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
25
Dateien 24 Beispiel: bytecopy2.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
26
Dateien 25 Beispiel: bytecopy3.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
27
Dateien 26 Diskussion Welches bytecopy ist schneller und effizienter?
Warum? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
28
Dateien 27 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
29
Dateien 28 Beispiel: Netzwerkserver
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
30
Dateien 29 Beispiel: Netzwerkclient
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
31
Dateien 30 Beispiel: Pipe
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.