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) |