+----------------------------------IBM 拡張----------------------------------+
IOSTAT 値は、I/O ステートメントの実行時にファイルの終わり条件、レコードの終わり条件、またはエラー条件が発生した場合、 IOSTAT= 指定子の変数に割り当てられます。エラー条件には、次に示す 5 つのタイプのものがあります。致命的エラー、重大なエラー、回復可能なエラー、変換、Fortran 90 および Fortran 95 言語。
I/O ステートメントに IOSTAT= 指定子および EOR= がある場合、レコードの終わり条件により、IOSTAT= 指定子が -4 に設定され、EOR= ラベルが分岐します。
IOSTAT= および EOR= 指定子が I/O ステートメントにない場合にレコードの終わり条件が検出されると、プログラムは停止します。
IOSTAT 値 | レコードの終わり条件の記述 |
---|---|
-4 | 外部ファイルの非アドバンス、形式指示 READ で検出されたレコードの終わり |
ファイルの終わり条件は、入力リストおよび形式の相互作用により複数のレコードが必要とされるときに、入力ステートメントの実行開始時または定様式または入力ステートメントの実行時に発生します。入力ステートメントに IOSTAT= 指定子および END= 指定子がある場合、レコードの終わり条件により、IOSTAT= 指定子が以下に定義された値のいずれかに設定され、END= ラベルが分岐します。 IOSTAT= および END= 指定子が入力ステートメントにない場合にファイルの終わり条件が検出されると、プログラムは停止します。
ストリーム・アクセスの場合、ファイルの終わりを超えて読み取りを行おうとすると、ファイルの終わり条件が発生します。ファイルの終わり条件は、入力ステートメントの実行開始時、またはストリーム入力ステートメントの実行時に発生します。
ファイルの終わり条件は、定様式アクセス用に接続されたストリーム・ファイルの最終レコードを超えて読み取りを行おうとした場合にも発生します。
IOSTAT 値 | ファイルの終わり条件の記述 |
---|---|
-1 | 外部ファイルの順次またはストリーム READ でファイルの終わり、または直接アクセス読み取りで END= が指定されているか、レコードが存在しない。 |
-2 | 内部ファイルの READ で検出されたファイルの終わり。 |
致命的エラーは、実行システム内で検出されるシステム・レベルのエラーで、このエラーが発生すると、プログラムを実行できなくなります。致命的エラーが発生すると、短い (翻訳されていない) メッセージが装置 0 に書き込まれ、その後に、C ライブラリー・ルーチン abort() に対する呼び出しが行われます。メモリー・ダンプの結果は、どのような実行環境が構成されているかによって異なります。
重大なエラーは、ERR_RECOVERY 実行時オプションの値を YES に指定していた場合でも、回復させることはできません。
I/O ステートメントに IOSTAT= 指定子および ERR= がある場合、重大なエラーにより、
IOSTAT= 指定子が以下に定義された値のいずれかに設定され、ERR= ラベルが分岐します。
I/O ステートメントに IOSTAT= および ERR= 指定子がない場合に重大エラー条件が検出されると、プログラムは停止します。
IOSTAT 値 | エラー記述 |
---|---|
1 | END= が直接アクセス READ に指定されていなくて、レコードが存在しない。 |
2 | 内部ファイルの WRITE で検出されたファイルの終わり。 |
6 | ファイルが見つからず、'OLD' が OPEN ステートメントに指定されている。 |
10 | 直接ファイルでの読み取りエラー。 |
11 | 直接ファイルでの書き込みエラー。 |
12 | 順次ファイルまたはストリーム・ファイルでの読み取りエラー。 |
13 | 順次ファイルまたはストリーム・ファイルでの書き込みエラー。 |
14 | オープン・ファイル・エラー。 |
15 | ファイルで検出された永続 I/O エラー。 |
37 | 動的メモリーの割り振り障害 - メモリー不足。 |
38 | REWIND エラー。 |
39 | ENDFILE エラー。 |
40 | BACKSPACE エラー。 |
107 | ファイルが存在し、STATUS='NEW' が OPEN ステートメントに指定されてた。 |
119 | テープ装置に接続された装置で、BACKSPACE ステートメントを実行しようとした。 |
122 | 直接アクセス READ 時に不完全なレコードが検出された。 |
130 | パイプに接続するための OPEN ステートメントに ACTION='READWRITE' が指定された。 |
135 | ユーザー・プログラムが、サポートされないバージョンの XL Fortran 実行時環境に対して呼び出しを行っている。 |
139 | ACTION= 指定子に正しい値を使ってファイルがオープンされなかったため、I/O 操作が装置上で許可されない。 |
142 | CLOSE エラー。 |
144 | INQUIRE エラー。 |
152 | 順次アクセスしかできないファイルに対して、ACCESS='DIRECT' が OPEN ステートメントで指定された。 |
153 | POSITION='REWIND' または POSITION='APPEND' が OPEN ステートメントで指定されたが、ファイルがパイプである。 |
156 | OPEN ステートメントでの RECL= 指定子に対する無効値。 |
159 | 関連するデバイスが見つからないため、外部ファイル入力をフラッシュできなかった。 |
165 | 次に読み取りまたは書き込みの可能なレコードのレコード番号は、 INQUIRE ステートメントの NEXTREC= 指定子で指定された変数の範囲外である。 |
169 | 装置は同期 I/O 専用で接続されているため、非同期 I/O ステートメントを完了できない。 |
172 | ファイルは非同期 I/O 不可であるため、接続は失敗した。 |
173 | 同じ装置で非同期 WRITE ステートメントの保留中に非同期 READ ステートメントが実行されたか、または同じ装置で非同期 READ ステートメントの保留中に非同期 WRITE ステートメントが実行された。 |
174 | 前の非同期 I/O ステートメントが完了していないため、同期 I/O ステートメントを完了できない。 |
175 | ID= 指定子の値が無効であるため、WAIT ステートメントを完了できない。 |
176 | 対応する非同期 I/O ステートメントが別の有効範囲単位内にあるため、WAIT ステートメントを完了できない。 |
178 | 同じレコードの前の非同期直接 WRITE ステートメントがまだ完了していないため、レコードの非同期の直接 WRITE ステートメントは実行できない。 |
179 | 装置上に未完了の非同期 I/O 操作があるため、その装置で I/O 操作はできない。 |
181 | 複数接続は同期 I/O でしか許可されないため、ファイルを装置に接続できない。 |
182 | UWIDTH= オプションの値が無効。この値は、32 または 64 でなければならない。 |
183 | 装置の最大レコード長は、INQUIRE ステートメントの RECL= 指定子で指定されたスカラー変数の範囲外である。 |
184 | 送信データのバイト数は、I/O ステートメントの SIZE= または NUM= 指定子で指定されたスカラー変数の範囲外である。 |
185 | ファイルを、それぞれ異なる UWIDTH 値を持つ 2 つの装置に接続できない。 |
186 | 装置番号は、0 〜 2,147,483,647 の間になければならない。 |
192 | ファイル位置の値が、INQUIRE ステートメントの POS= 指定子で指定されたスカラー変数の範囲外である。 |
193 | ファイル・サイズの値が、INQUIRE ステートメントの SIZE= 指定子で指定されたスカラー変数の範囲外である。 |
回復可能エラーは、回復できるエラー状態のことです。
I/O ステートメントに IOSTAT= 指定子および ERR= がある場合、回復可能エラーが発生すると、
IOSTAT= 指定子が以下に定義された値のいずれかに設定され、ERR= ラベルへ分岐します。
I/O ステートメントに IOSTAT= および ERR= 指定子がなく、ERR_RECOVERY 実行時オプションが YES に設定されていると、回復処理が行われ、プログラムは継続します。
I/O ステートメントに IOSTAT= および ERR= 指定子がなく、ERR_RECOVERY オプションが NO に設定されていると、プログラムは停止します。
IOSTAT 値 | エラー記述 |
---|---|
16 | 直接 I/O で REC= 指定子の値が無効。 |
17 | 直接ファイルで I/O ステートメントが許可されない。 |
18 | 未接続の装置での直接 I/O ステートメント。 |
19 | 定様式ファイルで不定様式 I/O を行おうとした。 |
20 | 不定様式ファイルで定様式ファイル I/O を行おうとした。 |
21 | 直接ファイルで順次 I/O またはストリーム I/O を行おうとした。 |
22 | 順次ファイルまたはストリーム・ファイルで直接 I/O を行おうとした。 |
23 | すでに別の装置に接続済みのファイルに接続しようとした。 |
24 | OPEN 指定子が接続されたファイルの属性と一致しない。 |
25 | 直接ファイルについて、OPEN ステートメントで RECL= 指定子が省略された。 |
26 | OPEN ステートメントの RECL= 指定子が負の値をとる。 |
27 | OPEN ステートメントの ACCESS= 指定子が無効である。 |
28 | OPEN ステートメントの FORM= 指定子が無効である。 |
29 | OPEN ステートメントの STATUS= 指定子が無効である。 |
30 | OPEN ステートメントの BLANK 指定子が無効である。 |
31 | OPEN または INQUIRE ステートメントの FILE= 指定子が無効である。 |
32 | STATUS='SCRATCH' および FILE= 指定子が同一の OPEN ステートメントに指定された。 |
33 | ファイルが STATUS='SCRATCH' によってオープンされたときに、STATUS='KEEP' が CLOSE ステートメントに指定された。 |
34 | CLOSE ステートメントの STATUS= 指定子の値が無効である。 |
36 | I/O ステートメントで誤った装置番号が指定された。 |
47 | 名前リスト入力項目がゼロ以外のランクの 1 つ以上のコンポーネントで指定された。 |
48 | 名前リスト入力項目がゼロ・サイズの配列で指定された。 |
58 | 様式指定のエラー。 |
93 | エラー装置 (装置 0) で I/O ステートメントが許可されなかった。 |
110 | 定様式 I/O のデータ項目で、無効な編集記述子が使用された。 |
120 | NLWIDTH の設定値がレコードの長さを超えた。 |
125 | 不定様式ファイルの OPEN ステートメントで、BLANK= 指定子が指定された。 |
127 | 直接ファイルの OPEN ステートメントで、POSITION= 指定子が指定された。 |
128 | OPEN ステートメントの POSITION= 指定子の値が無効である。 |
129 | OPEN ステートメントの ACTION= 指定子が無効である。 |
131 | 不定様式ファイルの OPEN ステートメントで、DELIM== 指定子が指定された。 |
132 | OPEN ステートメントの DELIM= 指定子の値が無効である。 |
133 | 不定様式ファイルの OPEN ステートメントで、PAD= 指定子が指定された。 |
134 | OPEN ステートメントの PAD= 指定子の値が無効である。 |
136 | READ ステートメントの ADVANCE= 指定子の値が無効である。 |
137 | SIZE= が READ ステートメントに指定されるときに、 ADVANCE='NO' が指定されていない。 |
138 | EOR= が READ ステートメントに指定されるときに、 ADVANCE='NO' が指定されていない。 |
145 | ファイルがファイル終了レコードの後に位置付けられているときに、READ または WRITE を実行しようとした。 |
163 | 非ランダム・アクセス装置上にあるファイルへの複数の接続は行えない。 |
164 | ACTION='WRITE' または ACTION='READWRITE' を指定した複数の接続は行えない。 |
170 | OPEN ステートメントの ASYNCH= 指定子の値が無効である。 |
171 | FORM= 指定子が FORMATTED に設定されているため、OPEN ステートメントに指定された ASYNCH= 指定子は無効である。 |
177 | 未完了の非同期 I/O 操作があるときに、装置がクローズされた。 |
191 | ACCESS= 指定子に STREAM 値を持つ OPEN ステートメントで RECL= 指定が指定された。 |
194 | BACKSPACE ステートメントが不定様式ストリーム I/O 用に接続された装置を指定した。 |
195 | I/O ステートメントの POS= 指定子が 1 よりも小さい。 |
196 | ストリーム・アクセス用に装置が接続されていないため、その装置上でストリーム I/O ステートメントを実行できない。 |
197 | I/O ステートメントの POS= 指定子が、検出できないファイルに接続されている装置を指定した。 |
198 | 未接続の装置でのストリーム I/O ステートメント。 |
データが無効であるか、データ転送ステートメントでデータの長さが正しくないと、変換エラーが発生します。
I/O ステートメントに IOSTAT= 指定子および ERR=ラベルがあり、
CNVERR オプションが YES に設定されている場合、変換エラーが発生すると、IOSTAT= 指定子が以下に定義した値のいずれかに設定され、ERR= ラベルに分岐します。
I/O ステートメントに IOSTAT= および ERR= 指定子がなく、CNVERR および ERR_RECOVERY の両オプションが YES に設定されていると、回復処理が行われ、プログラムは継続します。
I/O ステートメントに IOSTAT= および ERR= 指定子がなく、CNVERR オプションが YES に設定され、ERR_RECOVERY オプションが NO に設定されていると、プログラムは停止します。
CNVERR オプションが NO に設定されると、ERR ラベルには分岐せずに、以下に示すように IOSTAT= 指定子が設定される場合があります。
IOSTAT 値 | エラー記述 | CNVERR=NO の場合の IOSTAT の設定 |
---|---|---|
3 | 不定様式ファイルでレコードの終わりが検出された。 | なし |
4 | アドバンス I/O を使用する定様式ファイルでレコードの終わりが検出された。 | なし |
5 | 内部ファイルでレコードの終わりが検出された。 | なし |
7 | 外部ファイルで誤った形式のリスト指示入力が検出された。 | あり |
8 | 内部ファイルで誤った形式のリスト指示入力が検出された。 | あり |
9 | 内部ファイルに対してリスト指示または NAMELIST データ項目が長すぎる。 | あり |
41 | 外部ファイルで有効な論理入力が検出されなかった。 | なし |
42 | 内部ファイルで有効な論理入力が検出されなかった。 | なし |
43 | 外部ファイルでリスト指示または NAMELIST 入力の使用が予想される複素数値が検出されなかった。 | なし |
44 | 内部ファイルでリスト指示または NAMELIST 入力の使用が予想される複素数値が検出されなかった。 | なし |
45 | NAMELIST 入力で、不明または誤った派生型のコンポーネント名で NAMELIST 項目名が指定された。 | なし |
46 | NAMELIST 入力で、誤ったサブストリング範囲で NAMELIST 項目名が指定された。 | なし |
49 | リスト指示または名前リスト入力で誤って区切られた文字ストリングが入っていた。 | なし |
56 | 誤った数字が B、O、または Z 形式の編集記述子の入力で検出された。 | なし |
84 | 外部ファイルで NAMELIST グループ・ヘッダーが検出されなかった。 | あり |
85 | 内部ファイルで NAMELIST グループ・ヘッダーが検出されなかった。 | あり |
86 | 外部ファイルで誤った NAMELIST 入力値が検出された。 | なし |
87 | 内部ファイルで誤った NAMELIST 入力値が検出された。 | なし |
88 | NAMELIST 入力で誤った名前が検出された。 | なし |
90 | 入力で、NAMELIST グループまたは項目名に誤った文字がある。 | なし |
91 | NAMELIST の入力構文が無効である。 | なし |
92 | 入力で、NAMELIST 項目に対して添え字リストが無効である。 | なし |
94 | 外部ファイルで、リスト指示または NAMELIST 入力に対して繰り返し指定子が無効である。 | なし |
95 | 内部ファイルで、リスト指示または NAMELIST 入力に対して繰り返し指定子が無効である。 | なし |
96 | 入力での整数のオーバーフロー。 | なし |
97 | 入力で 10 進数字が無効である。 | なし |
98 | B、O、または Z 形式の編集記述子に対して入力データが長すぎる。 | なし |
121 | NAMELIST 項目名または NAMELIST グループ名の出力長が、最大レコード長または NLWIDTH オプションで指定した出力幅よりも長い。 | あり |
Fortran 90 言語のエラーは、Fortran 90 言語に対する XL Fortran の拡張機能を使用することによって起こります。これは、コンパイル時には検出できません。 LANGLVL 実行時オプションが 90STD という値で指定されていて、 ERR_RECOVERY 実行時オプションが設定されていないか、 NO に設定されている場合に、Fortran 90 言語エラーは、重大なエラーと見なされます。 LANGLVL=90STD および ERR_RECOVERY= YES が両方とも指定されている場合には、エラーは回復可能エラーと見なされます。 LANGLVL= EXTENDED が指定されると、そのエラー条件はエラーとは見なされません。
Fortran 95 言語のエラーは、Fortran 95 言語に対して、
XL Fortran の拡張機能を使用することによって起こります。これは、コンパイル時には検出できません。
LANGLVL 実行時オプションが 95STD という値で指定されていて、ERR_RECOVERY 実行時オプションが設定されていないか、NO に設定されている場合に、Fortran 95 言語エラーは、重大なエラーと見なされます。LANGLVL=95STD および ERR_RECOVERY= YES が両方とも指定されている場合には、エラーは回復可能エラーと見なされます。
LANGLVL= EXTENDED が指定されると、そのエラー条件はエラーとは見なされません。
表 11. Fortran 90 および Fortran 95 言語エラー条件の IOSTAT 値
IOSTAT 値 | エラー記述 |
---|---|
53 | 定様式 I/O での編集記述子と項目タイプの不一致。 |
58 | 様式指定のエラー。 |
140 | I/O ステートメントを実行しようとしたときに、装置が接続されていない。これは、READ、WRITE、PRINT、REWIND、および ENDFILE の場合のみ。 |
141 | 装置の REWIND または BACKSPACE の介入なしに 2 つの ENDFILE ステートメントがある。 |
151 | FILE= 指定子が抜けており、OPEN ステートメントで STATUS= 指定子が 'SCRATCH' の値をもっていない。 |
187 | NAMELIST 注釈は Fortran 90 標準では使用できません。 |
199 | STREAM が、Fortran 90 または Fortran 95 での OPEN ステートメントの ACCESS= に有効な値ではない。 |
+--------------------------------IBM 拡張の終り-------------------------------+