Datei Ein-/Ausgabe

Die Funktionen zur gepufferten Ein- und Ausgabe auf Dateiebene sind in der Standardbibliothek genau festgelegt.
In unseren Betrachtungen wird der Low-Level I/O ausser acht gelassen, da sozusagen alle Dateimanipulationen auch über die nachfolgend beschriebenen Funktionen erfolgen können.

Um die nachfolgenden Funktionen in eigenen Programmen verwenden zu können muss im Quellprogramm die Headerdatei <stdio.h> eingebunden werden.

#include <stdio.h>

Jede Datei muss vor einem Zugriff auf dieselbe geöffnet werden. Wir verwenden dazu die Funktion

            FILE *fopen (char *dateiname, char *modus);

welche als Funktionswert einen Zeiger auf eine FILE-Struktur liefert oder einen NULL-Zeiger, wenn die Datei nicht geöffnet werden konnte. Das Argument modus gibt an, für welche Zugriffsart die Datei geöffnet werden soll:

- "r"             Datei wird zum Lesen geöffnet.

- "w"           Datei wird zum Schreiben geöffnet. Existiert bereits eine Datei mit dem angegebenen Namen, so wird der Inhalt dieser Datei gelöscht.

- "r+"          Datei wird zum Lesen und Schreiben geöffnet. Bestehende Daten bleiben erhalten.

- "w+"         Datei wird zum Lesen und Schreiben geöffnet. Bestehende Daten werden gelöscht.

- "a"            Datei wird zum Schreiben geöffnet und zum Dateiende gespult, um die neuen Daten an die bestehende Datei anzuhängen.

- "a+"          Datei wird zum Lesen und Schreiben geöffnet und an das Dateiende gespult.

Ein angefügtes "b" kennzeichnet den Zugriff auf eine Binärdatei. Das bedeutet, dass beim Lesen der Datei die Zeichenkombination 'CR'+'LF' nicht umgewandelt wird zu einem '\n'.

Beim Programmstart werden vom System 3 Dateien automatisch geöffnet und folgenden Geräten zugewiesen:

stdin Standardeingabe. In aller Regel die Tastatur.
stdout Standardausgabe. Normalerweise der Bildschirm.
stderr Standardfehlerkanal. Gewöhnlich der Bildschirm.

Wenn die Datei fertig bearbeitet wurde sollte sie ordnungsgemäss geschlossen werden mit Hilfe der Funktion

            int fclose (FILE *dateizeiger);

Als Funktionswert wird 0 zurückgegeben, wenn die Datei ordnungsgemäss geschlossen werden konnte.

Für den Zugriff auf die geöffnete Datei gibt es eine Fülle von Funktionen, deren wichtigste hier kurz aufgeführt werden.

Funktionen für Textdateien

int getc (FILE *dateizeiger);

Liest ein einzelnes Zeichen aus der Datei und gibt dieses als Funktionswert zurück. Ist das Dateiende erreicht wird EOF zurückgegeben.

int putc (int zeichen, FILE *dateizeiger);

Schreibt das Zeichen in die Datei und gibt das geschriebene Zeichen oder EOF bei Fehler als Funktionswert zurück.

char *fgets (char *zeilenpuffer, int max_laenge, FILE *dateizeiger);

Liest eine Zeile aus einer Textdatei in den Zeilenpuffer. Es werden Zeichen gelesen, bis ein Zeilentrenner gefunden wird oder das Dateiende erreicht ist oder bis max_laenge - 1 Zeichen gelesen wurden. Der Zeilentrenner (falls gefunden) wird im Zeilenpuffer mit abgelegt.

int fputs (char *zeilenpuffer, FILE *dateizeiger);

Schreibt die in zeilenpuffer enthaltene Zeichenkette in die Datei und gibt EOF bei Fehler und einen nicht negativen Wert bei Erfolg zurück.

int fprintf (FILE *dateizeiger, char *format, ...);

Funktioniert genau wie printf, schreibt aber in die Datei.

int fscanf (FILE *dateizeiger, char *format, ...);

Funktioniert genau wie scanf, liest aber aus der Datei.

Funktionen für Binärdateien

size_t fread (void *puffer, size_t anzahl, size_t groesse, FILE *dateizeiger);

Liest anzahl Objekte der Grösse groesse von der Datei ein und legt sie im Puffer ab.
Als Funktionswert wird die Anzahl effektiv gelesener Objekte zurückgegeben.

size_t fwrite (void *puffer, size_t anzahl, size_t groesse, FILE *dateizeiger);

Schreibt anzahl Objekte der Grösse groesse aus dem Puffer in die Datei.
Als Funktionswert wird die Anzahl effektiv geschriebener Objekte zurückgegeben.

int fseek (FILE *dateizeiger, long offset, int ursprung);

Setzt den Schreib-/Lesezeiger für die nächste Dateioperation an die angegebene Stelle in der Datei.

long ftell (FILE *dateizeiger);

Liefert die aktuelle Position des Schreib-/Lesezeigers für die entsprechende Datei.

Allgemeine Funktionen

int fflush (FILE *dateizeiger);

Schreibt alle im systeminternen Puffer noch enthaltenen Daten in die Datei.

int ungetc (int zeichen, FILE *dateizeiger);

Stellt ein Zeichen in die Datei zurück sodass es beim nächsten Lesevorgang als erstes Zeichen gelesen wird. Es darf nur ein Zeichen in eine Datei zurückgestellt werden.

int feof (FILE *dateizeiger);

Liefert einen von 0 verschiedenen Wert, wenn das Dateiende bereits erreicht wurde.