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 POSIX-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 z.B. in Abschnitt „Ein-/Ausgabezustände" dargestellt.
Die beiden in der FILE STATUS-Klausel defibrinieren Datenfelder haben folgende Funktion:
datenname-1
enthält nach jeder Ein-/Ausgabeoperation auf die zugeordnete Datei einen zweistelligen numerischen Zustandscode.
datenname-2
ist unterteilt in datenname-2-1 und datenname-2-2. Es dient der Aufnahme des SIS-Codes (POSIX) 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 | SIS-Code | Wert von | Wert von |
nein | nicht relevant | undefiniert | undefiniert |
ja | nein | 0 | undefiniert |
ja | ja | 96 | SIS-Code der zugeordneten Fehlermeldung |
Bei Programmablauf im BS2000 lässt sich der Bedeutungstext des jeweiligen SIS-Codes mit dem Kommando HELP-MSG-INFORMATION SIS<datenname-2-2> ausgeben.
Der einfache und der erweiterte Ein-/Ausgabezustand sind in den beiden folgenden Tabellen beschrieben.
Einfacher Ein-/Ausgabezustand
Wert | Org *) | Bedeutung |
0x | erfolgreiche Ausführung | |
00 | SRI | keine weitere Information |
1x | erfolglose Ausführung: AT END-Bedingung | |
10 | SRI | erfolgloser READ, da Dateiende erreicht |
2x | erfolglose Ausführung, Schlüsselfehler | |
21 | I | falsche Schlüsselreihenfolge bei sequenziellem Zugriff |
3x | erfolglose Ausführung, permanenter Fehler | |
30 | SRI | keine weitere Information (SIS-Code beachten) |
4x | erfolglose Ausführung, logischer Fehler | |
41 | SRI | OPEN auf bereits geöffnete Datei |
9x | sonstige erfolglose Ausführung | |
90 | SRI | Systemfehler, keine weiteren Informationen |
*) S = sequenzielle Organisation, R = relative Organisation, I = indexsequenzielle Organisation
Erweiterter Ein-/Ausgabezustand (SIS-Code)
Ein-/Ausgabezustand | Bedeutung |
0601 | Dateiende ist erreicht |
0602 | Spezifizierter Satz existiert nicht |
0603 | Spezifizierter Satz existiert bereits |
0604 | Dateianfang ist erreicht |
0605 | Spezifizierter Link existiert nicht |
0606 | Dateiname ist länger als P_MAXFILENAME |
0607 | Pfad ist länger als P_MAXPATHSTRG |
0608 | Pfadname ist länger als P_MAXPATHNAME |
0609 | Linkname ist länger als P_MAXLINKNAME |
0610 | kein ausreichender Speicherplatz verfügbar |
0611 | Anzahl der Pfadelemente übersteigt P_MAXHIERARCHY |
0612 | Funktion wird nicht unterstützt |
0613 | Dateiname ist fehlerhaft oder leer |
0614 | Anzahl der Sekundärschlüssel übersteigt P_MAXKEYS |
0615 | Anzahl offener Dateien übersteigt systemspezifische Grenze |
0616 | Spezifizierte Datei existiert nicht |
0617 | Kein Schreibzugriff erlaubt |
0618 | kein Dateiname spezifiziert |
0619 | Datei ist gesperrt |
0620 | unzulässige Kombination von Dateiattributen |
0621 | File-Handle ist ungültig |
0622 | Aktueller Datensatz ist kürzer als MINSIZE |
0623 | Aktueller Datensatz ist länger als MAXSIZE |
0625 | Vor rwrite sequenziell wurde kein read sequenziell ausgeführt |
0626 | Spezifiziertes Satzformat ist unzulässig |
0627 | MINSIZE ist größer als MAXSIZE |
0628 | Spezifizierte Organisation ist unzulässig |
0629 | Nicht existent spezifizierte Datei existiert |
0630 | Spezifizierte Zugriffsfunktion ist nicht erlaubt |
0631 | Spezifizierter Schlüssel ist unzulässig |
0632 | Mehrfachschlüssel ist nicht erlaubt |
0633 | Aktueller Satz ist zur Zeit gesperrt |
0634 | Aktueller Schlüssel in fehlerhafter Reihenfolge |
0635 | Spezifizierter Pfad ist undefiniert |
0636 | Es ist ein systemspezifischer Fehler aufgetreten |
0637 | Zeilenende ist erreicht |
0638 | Satz wurde abgeschnitten |
0640 | Kein Speicherplatz zur Dateierweiterung verfügbar |
0643 | Spezifizierter Öffnungsmodus ist unzulässig |
0644 | Länge des Links übersteigt P_MAXLINKSTRG |
0645 | Versionsidentifikation ist fehlerhaft |
0646 | Spezifizierte Dateiexistenz ist unzulässig |
0647 | Syntaxfehler im Dateinamen, Link oder Pfad |
0649 | Spezifizierter Modus beim Schließen ist unzulässig |
0650 | Dateizugriff ist nicht erlaubt |
0651 | Fehlerhafter Parameter angegeben |
0652 | Zeiger in den Ein-/Ausgabebereich ist fehlerhaft |
0653 | Satzlänge ist fehlerhaft |
0654 | Speichermangel auf Ausgabemedium aufgetreten |
0655 | Spezifizierte Vorschubsteuerung ist unzulässig |
0656 | Spezifizierter Code ist unzulässig |
0657 | Öffnungsmodus und Dateiexistenz sind unzulässig kombiniert |
0658 | Ein-/Ausgabeunterbrechung aufgetreten |
0659 | Länge des Schlüsselwortes übersteigt P_MAXKEYWORD |
0660 | Schlüsselwort ist mehrdeutig |
0661 | Anzahl der Exits übersteigt P_MAXEXITS |
0662 | Zeilenvorschubsteuerzeichen erkannt |
0663 | Seitenvorschubsteuerzeichen erkannt |
0664 | Einige Pfade sind nicht geschlossen |
0665 | Nächster Satz hat den gleichen Sekundärschlüssel |
0666 | Sekundärschlüssel des geschriebenen Satzes existiert bereits |
0667 | Aktuelle Satznummer ist größer als MAX_REC_NR |
0668 | Pfad ist bereits definiert |
0669 | Link ist bereits definiert |
0670 | Spezifizierter Wert für Positionierbedingung ist unzulässig |
0671 | Unbekanntes Kontrollzeichen gefunden |
0672 | Es konnte kein eindeutiger Dateiname erzeugt werden |
0673 | Letzter Teilsatz wurde nicht abgeschlossen |
0674 | Spezifizierter Wert für Positionierung ist unzulässig |
0675 | Satzformat ist nicht bestimmbar |
0676 | MAXSIZE ist nicht bestimmbar |
0677 | Interner PROSOS-D Fehler aufgetreten |
0678 | Spezifizierte Datei ist ein Container von Dateien |
0679 | Spezifizierte Datei ist unter angegebenem Pfad nicht erreichbar |
0680 | Versionsangabe kann nicht erhöht werden |
0681 | Nochmaliges Öffnen nach implizitem Schließen wurde abgewiesen |
0682 | Fehler bei Initialisierung von PROSOS-D |
0683 | Linkindirektionen übersteigen P_MAXLINKNESTING |