Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

fsetpos, fsetpos64 - Lese-/Schreibzeiger im Datenstrom auf aktuellen Wert positionieren

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

int fsetpos(FILE *stream, const fpos_t *pos);
int fsetpos64(FILE *stream, const fpos64_t *pos);

Beschreibung

fsetpos() positioniert den Lese-/Schreibzeiger der Datei mit Dateizeiger stream auf eine zuvor mit fgetpos() ermittelte Position pos.

fsetpos() löscht das Dateiendekennzeichen für den Datenstrom und macht jede Wirkung der Funktion ungetc() auf den Datenstrom rückgängig. Nach fsetpos() können mit einer änderbaren Datei Ein- oder Ausgabeoperationen durchgeführt werden.

Es besteht kein funktioneller Unterschied zwischen fsetpos() und fsetpos64(), außer dass fsetpos64() einen fpos64_t Typ verwendet.

Returnwert

0

bei Erfolg.

 

!= 0

bei Fehler.

BS2000
errno wird auf EBADF gesetzt.(Ende)

Hinweise

Ob fsetpos() für eine BS2000- oder eine POSIX-Datei ausgeführt wird, hängt von der Programmumgebung ab.

BS2000
fsetpos() lässt sich auf Binärdateien (SAM im Binärmodus, PAM, INCORE) und Textdateien (SAM im Textmodus, ISAM) anwenden. fsetpos() ist nicht anwendbar auf Systemdateien (SYSDTA, SYSLST, SYSOUT).

Ein erfolgreicher Aufruf der Funktion fsetpos() löscht das Kennzeichen EOF der Datei und hebt die Wirkung der vorangegangenen ungetc-Aufrufe für diese Datei auf.

Werden in eine Textdatei neue Sätze geschrieben (geöffnet zum Neuerstellen oder Anfügen) und erfolgt ein fsetpos-Aufruf, dann werden zunächst ggf. restliche Daten aus dem Puffer in die Datei geschrieben und mit dem Zeilenendezeichen (\n) abgeschlossen.

Ausnahme bei ANSI-Funktionalität:
Wenn die Daten einer ISAM-Datei im Puffer nicht mit einem Zeilenendezeichen abgeschlossen sind, bewirkt fsetpos() keinen Zeilenwechsel bzw. Satzwechsel. D.h., die Daten werden beim Schreiben aus dem Puffer nicht automatisch mit einem Zeilenendezei-

chen abgeschlossen. Nachfolgende Daten verlängern den Satz in der Datei. Beim Lesen einer ISAM-Datei werden daher nur Zeilenendezeichen eingelesen, die vom Programm explizit geschrieben wurden.

Nach der Positionierung kann die nächste Operation sowohl eine Lese- als auch eine Schreiboperation sein.

Für ISAM-Dateien ist das Funktionspaar fgetpos()/fsetpos() wesentlich performanter als das vergleichbare Funktionspaar ftell()/fseek().

Bei Satz-Ein-/Ausgabe in ISAM-Dateien mit Schlüsselverdoppelung kann mit fsetpos() nicht auf den zweiten oder höheren Schlüssel einer Gruppe mit gleichen Schlüsseln positioniert werden. Dies lässt sich nur durch sequenzielles Lesen bzw. Löschen erreichen.Mit fsetpos() kann nur auf den ersten Satz oder hinter den letzten Satz einer solchen Gruppe positioniert werden. (Ende)

Siehe auch

fgetpos(), fseek(), ftell(), open(), rewind(), ungetc(), stdio.h.