9 Arbeiten mit Dateien
9.1 Grundlagen
9.1 Grundlagen Alle bisher besprochenen Beispiele und Programme waren lediglich in der Lage, von der Standardeingabe (Tastatur) zu lesen bzw. auf die Standardausgabe (Bildschirm) zu schreiben. Unter UNIX (auch unter MS-DOS ab Version 2.0) ist eine Umleitung dieser Standardein-/ausgabe möglich. Die Umleitung bezieht sich auf die Aufrufe der Funktionen getchar, putchar, printf und scanf, also auf alle Funktionen, die von der Standardeingabe (stdin) lesen bzw. auf die Standardausgabe (stdout) schreiben. Eine Umleitung der Standard Ein-/Ausgabe erfolgt mit den Umleitungssymbolen <, > und >> bzw. durch Pipe Bildung mit | beim Aufruf des Programmes. Beispiele:
Die Umleitung erfolgt transparent, d.h. das Programm merkt nichts davon; die Umleitungsangaben tauchen auch nicht in argv auf. Beim Arbeiten mit Dateien muß die Include-Datei stdio.h dazugeladen werden. Dies erreicht man mittels
stdio.h enthält wichtige Definitionen von Konstanten und einer Struktur für den Dateizugriff. (Siehe dazu auch den Eintrag in der C-Standardbibliothek zu stdio.h).
definieren fp als einen Zeiger auf die Struktur FILE und fopen() als eine Funktion, die ein solches Resultat (einen Pointer auf eine Struktur FILE) liefert. Eine Datei wird dann mittels
geöffnet. name ist der Dateiname (genauer Pfadname, Achtung Sonderbedeutung von Backslash in C!) als Zeichenkette und mode kann die Werte "r" (Lesezugriff), "w" (Schreibzugriff) und "a" (anfügender Schreibzugriff) haben. Nach erfolgreichem Öffnen der Datei wird von fopen ein Zeiger auf eine Dateistruktur zurückgeliefert, ansonsten der Wert NULL (wie EOF in stdio.h definiert). War die Datei nicht schon vorhanden, so wird sie angelegt, allerdings nur bei Schreibzugriff (Das Lesen von nicht existierenden Dateien ist natürlich ein Fehler). Eine geöffnete Datei wird bei Programmende oder -abbruch mit exit() automatisch geschlossen. Dies ist insbesondere bei Schreibzugriffen wichtig, da nur dann der Restpuffer auch wirklich in die Datei gelangt. Generell sollte man aber jede nicht mehr benötigte Datei mit
wieder schließen. fp muß dabei ein vorher von fopen() zurückgebener Filepointer sein. Die Namen stdin, stdout und stderr sind vordefinierte konstante Filepointer, die man ohne Öffnen der zugehörigen Dateien verwenden kann, da das Öffnen beim Programmstart automatisch besorgt wird. Es gilt folgende Zuordnung:
Sonderfall:
Zeilenweise Ein-/Ausgabe kann mittels fgets und fputs erledigt werden.
liest die nächste Eingabezeile (bis zum und einschließlich des Zeilenendezeichens) von fp in den Vektor zeile. Es werden maximal ZEILAE-1 Zeichen gelesen und zeile immer mit '\0' abgeschlossen. Funktionswert von fgets ist der Zeigerwert zeile bzw. NULL, wenn das Dateiende erreicht ist (vgl. getline() ).
schreibt den Inhalt von zeile auf die Datei fp.
Für die formatierte Datei Ein-/Ausgabe werden fprintf und fscanf verwendet. Sie arbeiten genauso wie printf und scanf, haben jedoch zusätzlich als ersten Parameter den Filepointer fp. Für eine ausführlichere Darstellung der Datei- und der Ein-/Ausgabefunktionen siehe den Abschnitt Ein- und Ausgabe aus der C Standard-Bibliothek.
|
11. November 1999, Peter Klingebiel, DVZ |