Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Ein-/Ausgabezustände

Jeder Datei im Programm können mit der FILE STATUS-Klausel Datenfelder zugeordnet werden, in denen das Laufzeitsystem nach jedem Zugriff auf die Datei Informationen darüber hinterlegt,

  • ob die Ein-/Ausgabeoperation erfolgreich war und

  • welcher Art ggf. die dabei aufgetretenen Fehler sind.

Diese Informationen können z.B. in den DECLARATIVES durch USE-Prozeduren ausgewertet werden und gestatten eine Analyse von Ein-/Ausgabefehlern durch das Programm. Als Erweiterung zum COBOL-Standard bietet COBOL2000 die Möglichkeit, in diese Analyse auch die Schlüssel der DVS-Fehlermeldungen einzubeziehen. Dadurch lässt sich eine feinere Differenzierung der Fehlerursachen erreichen.

Die FILE STATUS-Klausel wird im FILE-CONTROL-Paragrafen der ENVIRONMENT DIVISION angegeben; ihr Format ist (siehe Handbuch „COBOL2000-Sprachbeschreibung“ [1]):


FILE STATUS IS datenname-1 [datenname-2]


Dabei müssen datenname-1 und, falls angegeben, datenname-2 in der WORKING-STORAGE SECTION oder der LINKAGE SECTION definiert sein. Für die Formate und die möglichen Werte dieser beiden Datenfelder gelten folgende Regeln:

datenname-1

  • muss als zwei Byte langes alphanumerisches Datenfeld erklärt werden, also z.B.

    01 datenname-1 PIC X(2).

  • enthält nach jeder Ein-/Ausgabeoperation auf die zugeordnete Datei einen zweistelligen numerischen Zustandscode, dessen Bedeutung der Tabelle am Ende dieses Abschnitts entnommen werden kann.

datenname-2

  • muss als sechs Byte langes Gruppenfeld der folgenden Struktur erklärt werden:

    01 datenname-2.
       02 datenname-2-1 PIC 9(2) COMP.
       02 datenname-2-2 PIC X(4).

  • dient der Aufnahme des DVS-Fehlerschlüssels (DVS-Codes) zum jeweiligen Ein-/ Ausgabezustand und enthält nach jedem Zugriff auf die zugeordnete Datei einen Wert, der vom Inhalt des Feldes datenname-1 abhängt und sich aus folgender Zusammenstellung ergibt:

    Inhalt von
    datenname-1
    ungleich 0?
    DVS-Code
    ungleich 0?
    Wert von
    datenname-2-1
    Wert von
    datenname-2-2
    neinnicht relevantundefiniertundefiniert
    janein0undefiniert
    jaja64DVS-Code der zugeordneten Fehlermeldung

    Die DVS-Codes und die zugeordneten Fehlermeldungen können dem Handbuch [4] entnommen werden.

Achtung

Für zeilensequenzielle Dateien steht nur der durch datenname-1 repräsentierte Ein-/ Ausgabezustand zur Verfügung.

Die Zustandswerte und ihre Bedeutung beziehen sich i.d.R. auf satzsequenzielle Dateien. Bei der Verarbeitung zeilensequenzieller Dateien müssen bezüglich der Interpretation der Zustandswerte die spezifischen Eigenheiten der zeilensequenziellen Organisation (siehe Abschnitt „Zeilensequenzielle Dateien") berücksichtigt werden.

Ein-/Ausgabe- Zustand

Bedeutung


Erfolgreiche Ausführung

00

Die Ein-/Ausgabe-Anweisung wurde erfolgreich ausgeführt. Es ist keine weitere Information bezüglich der Ein-/Ausgabe-Operation verfügbar.

04

Satzlängenkonflikt: Eine READ-Anweisung wurde erfolgreich ausgeführt. Die Länge des gelesenen Datensatzes liegt jedoch nicht in den Grenzen, die durch die Satzbeschreibungen der Datei festgelegt wurden.

05

Erfolgreicher OPEN INPUT/I-O/EXTEND auf eine Datei mit OPTIONAL-Angabe, die zum Zeitpunkt der Ausführung der OPEN-Anweisung nicht vorhanden war.

07

  1. Erfolgreiche OPEN-Anweisung mit NO REWIND-Klausel auf eine Datei auf UNIT-RECORD-Datenträger

  2. Erfolgreiche CLOSE-Anweisung mit NO REWIND-, REEL/UNIT- oder FOR REMOVAL-Klausel auf eine Datei auf UNIT-RECORD-Datenträger


Erfolglose Ausführung: Endebedingung

10

  1. Es wurde versucht, eine READ-Anweisung auszuführen. Es war jedoch kein nächster logischer Datensatz vorhanden, da das Dateiende erreicht war.

  2. Es wurde zum ersten Mal versucht, eine READ-Anweisung für eine nicht vor handene Datei mit OPTIONAL-Angabe auszuführen.


Erfolglose Ausführung: Permanenter Fehler

30

  1. Es ist keine weitere Information bezüglich der Ein-/Ausgabe-Operation verfügbar (der DVS-Code liefert weitere Informationen).

  2. Bei zeilensequenzieller Verarbeitung: erfolgloser Zugriff auf PLAM-Element

34

Es wurde versucht, außerhalb der vom System festgelegten Bereichsgrenzen einer sequenziellen Datei zu schreiben.

35

Es wurde versucht, eine OPEN-Anweisung mit INPUT-/I-O-Angabe für eine nicht vorhandene Datei auszuführen.

37

OPEN-Anweisung auf eine Datei, die auf folgende Weise nicht eröffnet werden kann:

  1. OPEN OUTPUT/I-O/EXTEND auf eine schreibgeschützte Datei (Passwort, RETENTION-PERIOD, ACCESS=READ)

  2. OPEN I-O auf eine Banddatei

  3. OPEN INPUT auf eine lesegeschützte Datei (Passwort)

38

Es wurde versucht, eine OPEN-Anweisung für eine Datei auszuführen, die vorher mit der LOCK-Angabe geschlossen wurde.

39

Die OPEN-Anweisung war aus einem der folgenden Gründe erfolglos:

  1. Im ADD-FILE-LINK-Kommando wurden einer oder mehrere der Operanden ACCESS-METHOD, RECORD-FORMAT bzw. RECORD-SIZE mit Werten angegeben, die von den entsprechenden expliziten oder impliziten Programmangaben abweichen.

  2. Bei Eingabedateien traten Satzlängenfehler auf (Katalogüberprüfung, falls RECFORM=F).

  3. Die Satzlänge ist größer als die BLKSIZE im Katalog bei Eingabedateien

  4. Für eine Eingabedatei stimmt der Katalogeintrag eines der Operanden FCBTYPE, RECFORM oder RECSIZE (falls RECFORM=F) nicht mit den entsprechenden expliziten oder impliziten Programmangaben bzw. mit den entsprechenden Angaben im ADD-FILE-LINK-Kommando überein.


Erfolglose Ausführung: Logischer Fehler

41

Es wurde versucht, eine OPEN-Anweisung für eine Datei auszuführen, die bereits eröffnet ist.

42

Es wurde versucht, eine CLOSE-Anweisung für eine Datei auszuführen, die nicht eröffnet ist.

43

Bei Zugriff auf eine Plattenspeicherdatei, die mit OPEN I-O eröffnet wurde

Die letzte vor Ausführung einer REWRITE-Anweisung ausgeführte Ein-/Ausgabe-Anweisung war keine erfolgreich ausgeführte READ-Anweisung.

44

Überschreiten der Bereichsgrenzen:

  1. Es wurde versucht, eine WRITE-Anweisung auszuführen.
    Die Länge des Datensatzes liegt jedoch nicht in dem für diese Datei zulässigenBereich.

  2. Es wurde versucht, eine REWRITE-Anweisung auszuführen.
    Der zurückzuschreibende Datensatz hat jedoch nicht die gleiche Länge wie der zu ersetzende Datensatz.

46

Es wurde versucht, eine READ-Anweisung für eine Datei auszuführen, die sich im Eröffnungsmodus INPUT oder I-O befindet; ein nächster gültiger Datensatz steht aber nicht zur Verfügung. Grund:

  1. Die vorhergehende READ-Anweisung war erfolglos, ohne eine Ende-Bedingung zu verursachen, oder

  2. Die vorhergehende READ-Anweisung hat eine Ende-Bedingung verursacht.

47

Es wurde versucht, eine READ-Anweisung für eine Datei auszuführen, die sich nicht im Eröffnungsmodus INPUT oder I-O befindet.

48

Es wurde versucht, eine WRITE-Anweisung für eine Datei auszuführen, die sich nicht im Eröffnungsmodus OUTPUT oder EXTEND befindet.

49

Es wurde versucht, eine REWRITE-Anweisung für eine Datei auszuführen, die sich nicht im Eröffnungsmodus I-O befindet.


Sonstige erfolglose Ausführungen

90

Systemfehler; es ist keine weitere Information über die Ursache vorhanden.

91

Systemfehler; ein Systemaufruf war nicht erfolgreich; entweder OPEN-Fehler oder kein freies Gerät; die eigentliche Ursache ist aus dem DVS-Code ersichtlich (siehe „FILE-STATUS-Klausel“)

95

Unverträglichkeit zwischen den Angaben im BLOCK-CONTROL-INFO- oder BUFFER-LENGTH-Operanden des ADD-FILE-LINK-Kommandos und dem Dateiformat, der Blockgröße oder dem Format des verwendeten Datenträgers.

Tabelle 24: Ein-/Ausgabezustände für sequenzielle Dateien