fgetpos, fseek, fsetpos, ftell, rewind - Neupositionierung eines Streams
Standard-C-Bibliothek (
libc,
-lc)
#include <stdio.h>
int fseek(FILE *datenstrom, long Versatz, int woher);
long ftell(FILE *datenstrom);
void rewind(FILE *datenstrom);
int fgetpos(FILE *restrict datenstrom, fpos_t *restrict pos);
int fsetpos(FILE *datenstrom, const fpos_t *pos);
Die Funktion
fseek() setzt den Datei-Positionszeiger für den
Stream
datenstrom. Die neue, in Byte gemessene Position ergibt sich
durch die Addition von
Versatz zu der durch
woher angegebenen
Position. Wenn
woher auf
SEEK_SET,
SEEK_CUR oder
SEEK_END gesetzt ist, ist der Versatz relativ zum Dateianfang, der
aktuellen Position oder dem Dateiende. Ein erfolgreicher Aufruf von
fseek() löscht den Dateiendezeiger für den Stream und
macht alle Auswirkungen der Funktion
ungetc(3) für den Stream
rückgängig.
Die Funktion
ftell() beschafft den aktuellen Wert des
Dateipositionszeigers für den Stream, auf den
datenstrom zeigt.
Die Funktion
rewind() setzt den Dateipositionszeiger für den
Stream, auf den
datenstrom zeigt, auf den Dateianfang. Sie ist
äquivalent zu
(void) fseek(stream, 0L, SEEK_SET)
löscht aber zusätzlich den Fehlerindikator für den Stream
(siehe
clearerr(3)).
Die Funktionen
fgetpos() und
fsetpos() sind alternative
Schnittstellen und gleichwertig zu
ftell() und
fseek() (mit
woher auf
SEEK_SET gesetzt). Sie bestimmen den aktuellen Wert
des Dateiversatzes und speichern ihn in oder von dem durch
pos
referenzierten Objekt. Auf einigen Nicht-UNIX-Systemen kann ein Objekt
fpos_t ein komplexes Objekt sein. Diese Routinen können der
einzige Weg sein, einen Text-Stream portabel neu zu positionieren.
Falls sich der Stream auf eine reguläre Datei bezieht und der
resultierende Stream-Versatz hinter der Größe der Datei liegt,
werden nachfolgende Schreibaktionen die Datei mit einem Loch bis zu dem
Versatz erweitern, bevor Daten übergeben werden. Siehe
lseek(2)
zu Details zu der Dateisuch-Semantik.
Die Funktion
rewind() gibt keinen Wert zurück. Bei erfolgreichem
Abschluss geben
fgetpos(),
fseek(),
fsetpos() 0
zurück;
ftell() den aktuellen Versatz. Anderenfalls wird -1
zurückgegeben und
errno gesetzt, um den Fehler anzuzeigen.
- EINVAL
- Das Argument woher für fseek() war
nicht SEEK_SET, SEEK_END oder SEEK_CUR. Oder: der
entstehende Datei-Versatz wäre negativ.
- ESPIPE
- Der datenstrom unterliegende Dateideskriptor ist
nicht durchsuchbar (er bezieht sich z.B. auf eine Pipe, ein FIFO oder
Socket).
Die Funktionen
fgetpos(),
fseek(),
fsetpos() und
ftell() können auch fehlschlagen und
errno für
alle Fehler setzen, die für die Routinen
fflush(3),
fstat(2),
lseek(2) und
malloc(3) festgelegt sind.
Siehe
attributes(7) für eine Erläuterung der in diesem
Abschnitt verwandten Ausdrücke.
Schnittstelle |
Attribut |
Wert |
fseek(), ftell(), rewind(), fgetpos(),
fsetpos() |
Multithread-Fähigkeit |
MT-Safe |
POSIX.1-2001, POSIX.1-2008, C99.
lseek(2),
fseeko(3)
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother
<
[email protected]>, Martin Eberhard Schauer <
[email protected]>,
Mario Blättermann <
[email protected]> und Helge
Kreutzmann <
[email protected]> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU
General Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer