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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<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.5 Direkte (B<strong>in</strong>äre) E<strong>in</strong>- <strong>und</strong> Ausgabe<br />

Mit <strong>die</strong>sen Funktionen werden unformatierte Speicherblöcke gelesen <strong>und</strong> geschrieben. Das heisst<br />

dass <strong>die</strong> Daten e<strong>in</strong>fach als zusammenhängende Blöcke von Bytes behandelt werden, es f<strong>in</strong>det ke<strong>in</strong>e<br />

Interpretation oder Umwandlung statt.<br />

size_t fread(void *ptr, size_t size, size_t nobj, FILE *stream)<br />

fread liest aus stream <strong>in</strong> das Array ptr höchstens nobj Objekte der Grösse<br />

size e<strong>in</strong> (Es werden also nobj * size Bytes gelesen). fread liefert <strong>die</strong> Anzahl<br />

der e<strong>in</strong>gelesenen Objekte; das kann weniger als <strong>die</strong> geforderte Zahl se<strong>in</strong>.<br />

Der Zustand des Datenstroms muss mit feof <strong>und</strong> ferror untersucht werden.<br />

size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *stream)<br />

fwrite schreibt nobj Objekte der Grösse size aus dem Array ptr <strong>in</strong> stream<br />

(Es werden also nobj * size Bytes geschrieben). Die Funktion liefert <strong>die</strong><br />

Anzahl der ausgegebenen Objekte; bei Fehler ist das weniger als nobj.<br />

19.5.6 Positionieren <strong>in</strong> Dateien<br />

Mit <strong>die</strong>sen Funktionen kann <strong>die</strong> aktuelle Schreib oder Leseposition <strong>in</strong> der Datei abgefragt oder gesetzt<br />

werden. Dies macht vor allem bei direkter E<strong>in</strong>- <strong>und</strong> Ausgabe S<strong>in</strong>n.<br />

<strong>in</strong>t fseek(FILE *stream, long offset, <strong>in</strong>t orig<strong>in</strong>)<br />

fseek setzt <strong>die</strong> Dateiposition für stream; e<strong>in</strong>e nachfolgende Lese- oder<br />

Schreiboperation wird auf Daten von der neuen Position an zugreifen. Für<br />

e<strong>in</strong>e b<strong>in</strong>äre Datei wird <strong>die</strong> Position auf offset Zeichen relativ zu orig<strong>in</strong> e<strong>in</strong>gestellt;<br />

dabei können für orig<strong>in</strong> <strong>die</strong> Werte SEEK_SET (Dateianfang)<br />

SEEK_CUR (aktuelle Position) oder SEEK_END (Dateiende) angegeben<br />

werden. Für e<strong>in</strong>en Textstrom muss offset Null se<strong>in</strong> oder e<strong>in</strong> Wert, der von<br />

ftell stammt (dafür muss dann orig<strong>in</strong> den Wert SEEK_SET erhalten). fseek<br />

liefert e<strong>in</strong>en von Null verschiedenen Wert bei Fehler.<br />

long ftell(FILE *stream)<br />

ftell liefert <strong>die</strong> aktuelle Dateiposition für stream oder -1L bei Fehler. ftell<br />

ist somit das Gegenstück zu fseek.<br />

void rew<strong>in</strong>d(FILE *stream)<br />

rew<strong>in</strong>d(fp) ist äquivalent zu fseek(fp, OL, SEEK_SET); clearerr(fp); Es<br />

setzt den Dateizeiger auf den Anfang der Datei zurück. Der nächste<br />

Schreib- oder Lesezugriff erfolgt am Dateianfang.<br />

<strong>in</strong>t fgetpos(FILE *stream, fpos_t *ptr) fgetpos speichert <strong>die</strong> aktuelle Position für stream bei *ptr. Der Wert kann<br />

später mit fsetpos verwendet werden. Der Datentyp fpos_t eignet sich zum<br />

Speichern von solchen Werten. Bei Fehler liefert fgetpos e<strong>in</strong>en von Null<br />

verschiedenen Wert.<br />

<strong>in</strong>t fsetpos(FILE *stream, const fpos_t *ptr)<br />

fsetpos positioniert stream auf <strong>die</strong> Position, <strong>die</strong> von fgetpos <strong>in</strong> *ptr abgelegt<br />

wurde. Bei Fehler liefert fsetpos e<strong>in</strong>en von Null verschiedenen Wert.<br />

19.5.7 Fehlerbehandlung<br />

Viele der Bibliotheksfunktionen notieren Zustandsangaben, z. B. wenn e<strong>in</strong> Dateiende oder e<strong>in</strong> Fehler<br />

gef<strong>und</strong>en wird. Diese Angaben können explizit gesetzt <strong>und</strong> getestet werden. Ausserdem kann<br />

der Integer-Ausdruck errno (der <strong>in</strong> deklariert ist) e<strong>in</strong>e Fehlernummer enthalten, <strong>die</strong><br />

mehr Information über den zuletzt aufgetretenen Fehler liefert.<br />

void clearerr(FILE *stream)<br />

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

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

void perror(const char *s)<br />

clearerr löscht <strong>die</strong> Dateiende- <strong>und</strong> Fehlernotizen für stream.<br />

feof liefert e<strong>in</strong>en von Null verschiedenen Wert, wenn für stream e<strong>in</strong> Dateiende<br />

notiert ist. (Also das Dateiende erreicht wurde).<br />

ferror liefert e<strong>in</strong>en von Null verschiedenen Wert, wenn für stream e<strong>in</strong> Fehler<br />

notiert ist.<br />

perror(s) gibt s <strong>und</strong> e<strong>in</strong>e von der Implementierung def<strong>in</strong>ierte Fehlermeldung<br />

aus, <strong>die</strong> sich auf <strong>die</strong> Fehlernummer <strong>in</strong> errno bezieht. Die Ausgabe erfolgt<br />

im Stil von fpr<strong>in</strong>tf(stderr, "%s: %s\n", s, "Fehlermeldung")<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!