Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmieren in C Dateien Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.

Ähnliche Präsentationen


Präsentation zum Thema: "Programmieren in C Dateien Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ."—  Präsentation transkript:

1 Programmieren in C Dateien Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ

2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ2 Dateien 1 Grundlegender Datentyp FILE zugrundeliegendes Modell: stream Daten- oder Bytestrom: Bytes werden sequentiell gepuffert gelesen / geschrieben Bsp: printf("HALLO, WELT");

3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ3 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

4 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ4 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

5 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ5 Dateien 4 fopen() liefert NULL bei Fehler, Bsp: 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

6 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ6 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,...)

7 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ7 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

8 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ8 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

9 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ9 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

10 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ10 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

11 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ11 Dateien 10 Beispiel: filecopy.c

12 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ12 Dateien 11 Beispiel: numcat.c

13 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ13 Dateien 12 Beispiel: revcat.c

14 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ14 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

15 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ15 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

16 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ16 Dateien 15 long ftell(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)

17 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ17 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

18 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ18 Dateien 17 Fehlerbehandlung int ferror(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

19 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ19 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

20 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ20 Dateien 19 Bsp: Schichten im Betriebsystem

21 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ21 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

22 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ22 Dateien 21 Standardfiledeskriptoren –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

23 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ23 Dateien 22 Diskussion –Warum Pufferung von IO? –Warum Schichtung Anwendungs-/Systemebene?

24 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ24 Dateien 23 Beispiel: bytecopy1.c

25 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ25 Dateien 24 Beispiel: bytecopy2.c

26 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ26 Dateien 25 Beispiel: bytecopy3.c

27 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ27 Dateien 26 Diskussion –Welches bytecopy ist schneller und effizienter? –Warum?

28 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ28 Dateien 27

29 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ29 Dateien 28 Beispiel: Netzwerkserver

30 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ30 Dateien 29 Beispiel: Netzwerkclient

31 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ31 Dateien 30 Beispiel: Pipe


Herunterladen ppt "Programmieren in C Dateien Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ."

Ähnliche Präsentationen


Google-Anzeigen