Definition | #include <stdio.h> int fseek(FILE *dz, long distanz, int ort);
In Textdateien (SAM im Textmodus, ISAM) kann man absolut auf Dateianfang und Dateiende positionieren sowie auf eine vorher mit In Binärdateien (SAM im Binärmodus, PAM, INCORE) kann man sowohl absolut positionieren (s.o.) als auch relativ um eine gewünschte Anzahl Bytes, bezogen auf Dateianfang, Dateiende oder aktuelle Position. Für die Bearbeitung von Dateien > 2 GB verfahren Sie wie folgt:
Es besteht kein funktionaler Unterschied zwischen | |||||||||||||||||||||||||||||||||||||||||||||||
Parameter | FILE *dz Dateizeiger der Datei, deren Lese-/Schreibzeiger positioniert werden soll. long distanz / off_t distanz / long long distanz / off64_t distanz Bedeutung, Kombinationsmöglichkeiten und Wirkung dieser Parameter sind für Text- und Binärdateien unterschiedlich und werden deshalb im Folgenden getrennt beschrieben. Textdateien (SAM im Textmodus, ISAM) Mögliche Werte der Parameter:
Sinnvolle Kombinationsmöglichkeiten und Wirkung:
Binärdateien (SAM im Binärmodus, PAM, INCORE) Mögliche Werte der Parameter:
Sinnvolle Kombinationsmöglichkeiten und Wirkung:
| |||||||||||||||||||||||||||||||||||||||||||||||
Returnwert | 0 | bei Erfolg. | ||||||||||||||||||||||||||||||||||||||||||||||
-1 | bei Fehler. | |||||||||||||||||||||||||||||||||||||||||||||||
Hinweise | Der Aufruf Werden in eine Textdatei neue Sätze geschrieben (geöffnet zum Neuerstellen oder Anhängen) und erfolgt ein Ausnahme bei ANSI-Funktionalität: Wenn Sie bei einer zum Schreiben geöffneten Binärdatei hinter das Dateiende positionieren, entsteht ein „Loch“ zwischen den letzten physisch gespeicherten Daten und den neu geschriebenen Daten. Lesen aus diesem „Loch“ liefert binäre Nullen. Wenn Sie bei einer nur zum Lesen geöffneten Binärdatei hinter das Dateiende positionieren, führt das zu einem Fehler (EMDS). Auf Systemdateien (SYSDTA, SYSLST, SYSOUT) kann nicht positioniert werden. Ein erfolgreicher Aufruf der Funktion | |||||||||||||||||||||||||||||||||||||||||||||||
Satz-E/A |
Bei Aufrufen mit anderen Argumenten liefern | |||||||||||||||||||||||||||||||||||||||||||||||
Beispiel 1 | Folgendes Programm liest die Datei dat ab dem elften Zeichen bis Dateiende (funktioniert nur für Binärdateien). #include <stdio.h> int main(void) { FILE *fp; int c; if((fp = fopen("dat","rb")) != NULL) { /* die ersten 10 Zeichen überspringen */ fseek(fp,10L,SEEK_SET); while((c=getc(fp)) != EOF) putc((char)c,stdout); fclose(fp); } return 0; } | |||||||||||||||||||||||||||||||||||||||||||||||
Beispiel 2 | Folgendes Programm verarbeitet eine Datei im Update-Modus. Kleinbuchstaben werden als Großbuchstaben zurückgeschrieben, alle anderen Zeichen bleiben unverändert. #include <stdio.h> #include <ctype.h> int main(void) { FILE *fp; int c; long n; fp = fopen("link=link","r+w"); do { n = ftell(fp); c = getc(fp); if (islower(c) == 0) continue; /* Wenn Zeichen kein Kleinbuchstabe, */ /* nächstes Zeichen einlesen */ else { /* Wenn Zeichen ein Kleinbuchstabe, */ fseek(fp, n, SEEK_SET); /* auf dieses positionieren und als */ fputc((toupper(c)), fp); /* Großbuchstaben zurückschreiben. */ } } while(c != EOF); fclose(fp); return 0; } | |||||||||||||||||||||||||||||||||||||||||||||||
Siehe auch | ftell, ftello, ftell64, ftello64, fsetpos, fsetpos64, lseek, lseek64, rewind, tell |