21.11.2013 Aufrufe

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />

19.5 E<strong>in</strong>- <strong>und</strong> Ausgabe: <br />

Die Datei vere<strong>in</strong>bart Typen <strong>und</strong> Funktionen zum Umgang mit Streams. E<strong>in</strong> Stream<br />

(Datenstrom) ist Quelle oder Ziel von Daten <strong>und</strong> wird mit e<strong>in</strong>er Datei oder e<strong>in</strong>em Peripheriegerät<br />

verknüpft. Es werden zwei Arten von Streams unterstützt, nämlich für Text <strong>und</strong> für b<strong>in</strong>äre Information,<br />

<strong>die</strong> jedoch bei manchen Systemen, <strong>und</strong> <strong>in</strong>sbesondere bei UNIX identisch s<strong>in</strong>d. E<strong>in</strong> Textstrom<br />

ist e<strong>in</strong>e Folge von Zeilen; jede Zeile enthält null oder mehr Zeichen <strong>und</strong> ist mit '\n' abgeschlossen.<br />

Das Betriebssystem muss möglicherweise zwischen e<strong>in</strong>em Textstrom <strong>und</strong> e<strong>in</strong>er anderen Repräsentierung<br />

umwandeln (also zum Beispiel '\n' als Wagenrücklauf <strong>und</strong> Zeilenvorschub abbilden).<br />

E<strong>in</strong> Stream wird durch Öffnen (open) mit e<strong>in</strong>er Datei oder e<strong>in</strong>em Gerät verb<strong>und</strong>en; <strong>die</strong> Verb<strong>in</strong>dung<br />

wird durch Schliessen (close) wieder aufgehoben. Öffnet man e<strong>in</strong>e Datei, so erhält man e<strong>in</strong>en Zeiger<br />

auf e<strong>in</strong> Objekt vom Typ FILE, <strong>in</strong> welchem alle Information h<strong>in</strong>terlegt s<strong>in</strong>d, <strong>die</strong> zur Kontrolle<br />

des Stream nötig s<strong>in</strong>d.<br />

Wenn <strong>die</strong> Ausführung e<strong>in</strong>es Programms beg<strong>in</strong>nt, s<strong>in</strong>d <strong>die</strong> drei Streams std<strong>in</strong>, stdout <strong>und</strong><br />

stderr bereits geöffnet.<br />

19.5.1 Dateioperationen<br />

Die folgenden Funktionen beschäftigen sich mit Dateioperationen. Der Typ size_t ist der vorzeichenlose,<br />

ganzzahlige Resultattyp des sizeof-Operators. EOF ist e<strong>in</strong>e vordef<strong>in</strong>ierte Konstante, welche<br />

das Dateiende (End Of File) anzeigt.<br />

FILE *fopen(const char *filename, const char *mode) fopen eröffnet <strong>die</strong> angegebene Datei <strong>und</strong> liefert e<strong>in</strong>en<br />

Datenstrom oder NULL bei Misserfolg. Zu den erlaubten Werten von mode<br />

gehören<br />

"r" Textdatei zum Lesen öffnen<br />

"w" Textdatei zum Schreiben erzeugen; gegebenenfalls alten Inhalt<br />

wegwerfen<br />

"a" anfügen; Textdatei zum Schreiben am Dateiende öffnen oder erzeugen<br />

"r+" Textdatei zum Ändern öffnen (Lesen <strong>und</strong> Schreiben)<br />

"w+" Textdatei zum Ändern erzeugen; gegebenenfalls alten Inhalt<br />

wegwerfen<br />

"a+" anfügen; Textdatei zum Ändern öffnen oder erzeugen, Schreiben<br />

am Ende<br />

Ändern bedeutet, dass <strong>die</strong> gleiche Datei gelesen <strong>und</strong> geschrieben werden<br />

darf; fflush oder e<strong>in</strong>e Funktion zum Positionieren <strong>in</strong> Dateien muss zwischen<br />

e<strong>in</strong>er Lese- <strong>und</strong> e<strong>in</strong>er Schreiboperation oder umgekehrt aufgerufen werden.<br />

Enthält mode nach dem ersten Zeichen noch b, also etwa "rb" oder "w+b",<br />

dann wird auf e<strong>in</strong>e b<strong>in</strong>äre Datei zugegriffen. Date<strong>in</strong>amen s<strong>in</strong>d auf<br />

FILENAME_MAX Zeichen begrenzt. Höchstens FOPEN_MAX Dateien<br />

können gleichzeitig offen se<strong>in</strong>.<br />

FILE *freopen(const char *filename, const char *mode, FILE *stream)<br />

freopen öffnet <strong>die</strong> Datei für den angegebenen Zugriff mode <strong>und</strong> verknüpft<br />

stream damit. Das Resultat ist stream oder Null bei e<strong>in</strong>em Fehler. Mit<br />

freopen ändert man normalerweise <strong>die</strong> Dateien, <strong>die</strong> mit std<strong>in</strong>, stdout oder<br />

stderr verknüpft s<strong>in</strong>d. (Neue Datei mit bestehendem Stream verknüpfen)<br />

<strong>in</strong>t fflush(FILE *stream)<br />

Bei e<strong>in</strong>em Ausgabestrom sorgt fflush dafür, dass gepufferte, aber noch<br />

nicht geschriebene Daten geschrieben werden; bei e<strong>in</strong>em E<strong>in</strong>gabestrom ist<br />

der Effekt <strong>und</strong>ef<strong>in</strong>iert. Die Funktion liefert EOF bei e<strong>in</strong>em Schreibfehler<br />

<strong>und</strong> sonst Null. fflush(NULL) bezieht sich auf alle offenen Dateien.<br />

<strong>in</strong>t fclose(FILE *stream)<br />

fclose schreibt noch nicht geschriebene Daten für stream, wirft noch nicht<br />

gelesene, gepufferte E<strong>in</strong>gaben weg, gibt automatisch angelegte Puffer frei<br />

<strong>und</strong> schliesst den Datenstrom. Die Funktion liefert EOF bei Fehlern <strong>und</strong><br />

sonst Null.<br />

Gedruckt am 10.09.2009 14:23:00 Letzte Änderung am: 10. September 2009 Version 2.4.1, I. Oesch 74/147

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!