Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmieren in C Dateien

Ähnliche Präsentationen


Präsentation zum Thema: "Programmieren in C Dateien"—  Präsentation transkript:

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


Herunterladen ppt "Programmieren in C Dateien"

Ähnliche Präsentationen


Google-Anzeigen