Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Last Byte Pointer (LBP)

&pagelevel(4)&pagelevel

Im BS2000 ist die Länge einer PAM-Datei unabhängig von ihrem Inhalt immer ein ganzzahliges Vielfaches eines PAM-Blocks. Ab BS2000 OSD/BC V10.0 enthält der Katalogeintrag für PAM-Dateien den Eintrag Last Byte Pointer (LBP), in dem die echte Länge der Datei in Bytes hinterlegt werden kann. Dadurch können insbesondere auch Dateien, die auf einem Netzwerkserver (NAS) abgelegt sind, von allen darauf zugreifenden Systemen (auch UNIX) bytegenau gelesen und geschrieben werden.

Diese Funktionalität steht ggf. auch ab BS2000/OSD V8.0 zur Verfügung.

Bisher wurde die Länge einer PAM-Datei mit einer Hilfskonstruktion ermittelt, indem das eigentliche Ende der Datei durch einen speziellen Marker gekennzeichnet wurde. Auf diese Hilfskonstruktion kann bei Nutzung des LBP verzichtet werden.

Von dieser Schnittstelle sind alle C-Laufzeitfunktionen betroffen, die PAM-Dateien öffnen.

Die Funktionen fopen, fopen64, freopen, freopen64, open, open64 und creat, creat64 werden daher um den lbp-Schalter erweitert. Näheres finden Sie in den Beschreibungen der entsprechenden Funktionen.

Beim Öffnen oder Lesen bestehender Dateien verhalten sich diese Funktionen unabhängig vom lbp-Schalter folgendermaßen:

  • Ist der LBP der Datei ungleich 0, wird er ausgewertet. Ein eventuell vorhandener Marker wird ignoriert.

  • Ist der LBP = 0, wird nach einem Marker gesucht und die Dateilänge daraus ermittelt. Falls kein Marker gefunden wird, wird das Ende des letzten vollständigen Blocks als Dateiende betrachtet.

Beim Schließen von Dateien, die verändert oder neu erstellt wurden, hängt das Verhalten vom lbp-Schalter beim Öffnen der Datei bzw. von der Umgebungsvariablen LAST_BYTE_POINTER ab.

Umgebungsvariable LAST_BYTE_POINTER

Die Umgebungsvariable LAST_BYTE_POINTER hat den Zweck, dass bestehende Programme den LBP nutzen können, ohne dass in sie eingegriffen werden muss. Festgebundene Programme müssen dann lediglich mit dem aktuellen CRTE neu gebunden werden. Für Programme, die mit PARTIAL-BIND oder CRTE-BASYS gebunden sind, genügt es, wenn das aktuelle CRTE bzw. CRTE-BASYS installiert ist.

Falls eine der betroffenen Funktionen ohne lbp-Schalter aufgerufen wird, hängt ihr Verhalten vom Inhalt der Umgebungsvariablen LAST_BYTE_POINTER ab:

LAST_BYTE_POINTER=YES

Die Funktionen fopen, fopen64 und freopen, freopen64 verhalten sich so, als ob im Parameter art lbp=yes angegeben wäre.

Die Funktionen open, open64 und creat, creat64 verhalten sich so, als ob im Parameter modus O_LBP angegeben wäre.

Beim Öffnen wird geprüft, ob LBP-Unterstützung möglich ist. Ist dies nicht der Fall, so schlägt die betroffene Funktion fehl und errno wird auf ENOSYS gesetzt.

Beim Schließen einer Datei, die verändert oder neu erstellt wurde, wird kein Marker geschrieben (auch wenn einer vorhanden war) und ein gültiger LBP gesetzt. Auf diese Weise können Dateien mit Marker auf LBP ohne Marker umgestellt werden.
Bei NK-Dateien wird der letzte logische Block mit binären Nullen aufgefüllt, bei K-Dateien wird die Datei bis zum physikalischen Dateiende aufgefüllt.

LAST_BYTE_POINTER=NO

Die Funktionen fopen, fopen64 und freopen, freopen64 verhalten sich so, als ob im Parameter art lbp=no angegeben wäre.

Die Funktionen open, open64 und creat, creat64 verhalten sich so, als ob im Parameter modus O_NOLBP angegeben wäre.

Beim Schließen einer Datei, die neu erstellt wurde, wird der LBP auf Null (=ungültig) gesetzt. Es wird ein Marker geschrieben. Bei NK-Dateien wird der letzte logische Block mit binären Nullen aufgefüllt, bei K-Dateien wird die Datei bis zum physikalischen Dateiende aufgefüllt.

Beim Schließen einer Datei, die verändert wurde, wird der LBP auf Null (=ungültig) gesetzt. Ein Marker wird nur dann geschrieben, wenn vorher bereits ein Marker vorhanden war. Falls die Datei beim Öffnen einen gültigen LBP besaß, wird kein Marker geschrieben, da in diesem Fall davon ausgegangen wird, dass kein Marker vorhanden ist. Bei NK-Dateien wird der letzte logische Block mit binären Nullen aufgefüllt, bei K-Dateien wird die Datei bis zum physikalischen Dateiende aufgefüllt.

Ist die Umgebungsvariable nicht gesetzt, verhalten sich die Funktionen so, als ob sie den Wert NO hätte.

Näheres zur Verwendung von Umgebungsvariablen im BS2000 finden Sie im Abschnitt "Umgebungsvariablen“).