Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
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.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) 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) 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) clearerr löscht <strong>die</strong> Dateiende- <strong>und</strong> Fehlernotizen für stream.<br />
<strong>in</strong>t feof(FILE *stream) 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 />
<strong>in</strong>t ferror(FILE *stream) ferror liefert e<strong>in</strong>en von Null verschiedenen Wert, wenn für stream e<strong>in</strong> Fehler<br />
notiert ist.<br />
void perror(const char *s) 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 11.09.2008 13:04:00 Letzte Änderung am: 11. September 2008 Version 2.4, I. Oesch 80/147