Für das Einrichten von Dateien steht im BS2000 das CREATE-FILE Kommando zur Verfügung. Ein Task File Table-Eintrag mit weiteren Dateimerkmalen wird später mit dem ADD-FILE-LINK-Kommando erzeugt. Die vollständigen Formate und eine ausführliche Beschreibung können in den Handbüchern [3] oder [4] nachgelesen werden.
Katalogeintrag
Beim Festlegen der Dateimerkmale mit dem CREATE-FILE Kommando ist darauf zu achten, dass eine ausreichende Anfangszuweisung von Speicherplatz erfolgt.
Dies gilt insbesondere für Dateien, bei denen die Blockgröße die vom Betriebssystem standardmäßig angenommene Anfangszuweisung übersteigt. Die Blockgröße errechnet sich aus den Angaben im COBOL-Programm (siehe „COBOL2000-Sprachbeschreibung“ [1]). Ergibt sich aus dem COBOL Programm eine Blocklänge (STD, n), sollte die PRIMARY-ALLOCATION im SPACE-Operand des CREATE-FILE Kommandos
für sequentielle Dateien mindestens 2n sein.
für indizierte und relative Dateien mindestens 2n+2 sein.
Task File Table
Zu jeder Datei, für die ein ADD-FILE-LINK-Kommando mit dem Operanden
LINK-NAME=linkname
abgesetzt wird, erzeugt das DVS unter dem Dateikettungsnamen linkname in der Task File Table (TFT) der Task einen Eintrag, der alle Dateimerkmale festhält, die im ADD-FILE-LINK-Kommando explizit vereinbart wurden.
Jeder dieser Einträge bleibt so lange in der TFT gespeichert, bis er
durch ein REMOVE-FILE-LINK-Kommando für den zugeordneten Dateikettungsnamen oder bei Task-Ende zusammen mit dem der TFT gelöscht bzw.
durch ein neues ADD-FILE-LINK-Kommando für den gleichen Dateikettungsnamen überschrieben wird.
Über den aktuellen Inhalt der TFT kann man sich mit dem Kommando SHOW-FILE-LINK-Kommando informieren.
Versucht ein COBOL-Programm, eine Datei zu eröffnen, so prüft das DVS, ob in der TFT der Linkname eingetragen ist, der für die Datei bei der Übersetzung festgelegt wurde (siehe Abschnitt „Zuweisen von katalogisierten Dateien"). Wird ein solcher Eintrag gefunden, übernimmt das Programm die Dateimerkmale aus:
dem TFT-Eintrag unter diesem Linknamen,
den Dateieigenschaften, die explizit oder implizit im Programm vereinbart wurden und
dem Katalogeintrag der zugehörigen Datei.
Dabei überschreiben Angaben aus dem TFT-Eintrag (d.h. die explizit im ADD-FILE-LINK-Kommando festgelegten Dateimerkmale) die Dateivereinbarungen aus dem COBOL-Programm, während aus dem Katalogeintrag lediglich Dateimerkmale übernommen werden, die weder durch das Programm noch im TFT-Eintrag festgelegt sind oder im ADD-FILE-LINK-Kommando als Nulloperanden vereinbart wurden.
Beim Dateizugriff kann dieses Verfahren insbesondere dann zu Konflikten führen, wenn im ADD-FILE-LINK-Kommando Dateimerkmale angegeben werden, die mit den (explizit oder implizit) im COBOL-Programm festgelegten Eigenschaften oder mit dem Katalogeintrag der zugewiesenen Datei unvereinbar sind. Dies trifft vor allem auf folgende Situationen zu:
Widersprüchliche Angaben zur Eröffnungsart
COBOL-Programm
ADD-FILE-LINK-Kommando
OPEN INPUT...[REVERSED]
OPEN-MODE=OUTPUT oder OPEN-MODE=EXTEND
OPEN OUTPUT
OPEN-MODE=INPUT oder OPEN-MODE=REVERSE
OPEN EXTEND
OPEN-MODE=INPUT oder OPEN-MODE=REVERSE
Widersprüchliche Angaben zur Organisationsform der Datei
COBOL-Programm
ADD-FILE-LINK-Kommando
ASSIGN-KlauselORGANIZATION-Klausel
ACCESS-METHOD-Operand
Widersprüchliche Angaben zum Satzformat
COBOL-Programm
ADD-FILE-LINK-Kommando
RECORD-KlauselRECORDING MODE-Klausel
RECORD-FORMAT-Operand
Widersprüchliche Angaben zur Satzlänge
COBOL-Programm
ADD-FILE-LINK-Kommando
RECORD-KlauselDatensatzerklärung
RECORD-SIZE-Operand
Widersprüchliche Angaben zum Satzschlüssel
COBOL-Programm
ADD-FILE-LINK-Kommando
RECORD KEY-KlauselDatensatzerklärung
KEY-POSITION-OperandKEY-LENGTH-Operand
Widersprüchliche Angaben zum Plattenformat oder Dateiformat
Katalogeintrag
ADD-FILE-LINK-Kommando
BLK-CONTR =BUF-LEN =
BLOCK-CONTROL-INFO-OperandBUFFER-LENGTH-Operand
Beispiel 9-4
Erzeugen und Abbilden eines TFT-Eintrags
(Abbildung in BS2000/OSD V5.0)
/ADD-FILE-LINK INOUTFIL,ISAM.UPDATE, - (1) / BUFFER-LENGTH=*BY-CATALOG, | SUPPORT=*DISK(SHARED-UPDATE=*YES) (1) /SHOW-FILE-LINK INOUTFIL,INFORMATION=*ALL —————————————————————————— (2)
LINK-NAME ————————— FILE-NAME ————————————————————————————————————————————— INOUTFIL :N:$F2190202.ISAM.UPDATE ———————————————————— STATUS ——————————————————————————————————————————————— STATE = INACTIVE ORIGIN = FILE ———————————————————— PROTECTION ——————————————————————————————————————————— RET-PER = *BY-PROG PROT-LEV = *BY-PROG BYPASS = *BY-PROG DESTROY = *BY-CAT ———————————————————— FILE-CONTROL-BLOCK - GENERAL ATTRIBUTES —————————————— ACC-METH = *BY-PROG OPEN-MODE = *BY-PROG REC-FORM = *BY-PROG REC-SIZE = *BY-PROG BUF-LEN = *BY-CAT BLK-CONTR = *BY-PROG F-CL-MSG = STD CLOSE-MODE = *BY-PROG ———————————————————— FILE-CONTROL-BLOCK - DISK FILE ATTRIBUTES ———————————— SHARED-UPD = YES WR-CHECK = *BY-PROG IO(PERF) = *BY-PROG IO(USAGE) = *BY-PROG LOCK-ENV = *BY-PROG ———————————————————— FILE-CONTROL-BLOCK - TAPE FILE ATTRIBUTES ———————————— LABEL = *BY-PROG (DIN-R-NUM = *BY-PROG, TAPE-MARK = *BY-PROG) CODE = *BY-PROG EBCDIC-TR = *BY-PROG F-SEQ = *BY-PROG CP-AT-BLIM = *BY-PROG CP-AT-FEOV = *BY-PROG BLOCK-LIM = *BY-PROG REST-USAGE = *BY-PROG BLOCK-OFF = *BY-PROG TAPE-WRITE = *BY-PROG STREAM = *BY-PROG | ———————————————————— FILE-CONTROL-BLOCK - ISAM FILE ATTRIBUTES ———————————— KEY-POS = *BY-PROG KEY-LEN = *BY-PROG POOL-LINK = *BY-PROG LOGIC-FLAG = *BY-PROG VAL-FLAG = *BY-PROG PROPA-VAL = *BY-PROG DUP-KEY = *BY-PROG PAD-FACT = *BY-PROG READ-I-ADV = *BY-PROG WR-IMMED = *BY-PROG ———————————————————— VOLUME ——————————————————————————————————————————————— DEV-TYPE = *NONE T-SET-NAME = *NONE VSN/DEV = PUBN03/D3480
(1) | Das ADD-FILE-LINK-Kommando weist der Datei ISAM.UPDATE den Linknamen INOUTFIL zu und vereinbart
Das DVS legt einen TFT-Eintrag unter dem Namen INOUTFIL an, in den es diese Angaben übernimmt. |
(2) | Das SHOW-FILE-LINK-Kommando gibt den TFT-Eintrag für INOUTFIL mit den Operandenwerten aus. Dabei sind die Werte
auf die Angaben im ADD-FILE-LINK-Kommando zurückzuführen. Alle übrigen Operanden wurden nicht explizit vereinbart und haben die voreingestellten Werte*BY-PROG oder *NONE. |