条件および IOSTAT 値

IOSTAT= 指定子値は、入出力ステートメントの 実行時にファイルの終わり条件レコードの終わり条件、 またはエラー条件が発生した場合に、値を変数に割り当てます。 IOSTAT= 指定子は、以下のタイプのエラー条件を報告します。

レコードの終わり条件

アプリケーションが IOSTAT= 指定子を指定してレコードの終わり条件を検出した場合、 値を -4 に設定し、EOR= ラベルがある場合には、そのラベルに分岐します。 I/O ステートメントに IOSTAT= および EOR= 指定子がない場合に、 アプリケーションがレコードの終わり条件を検出すると、アプリケーションは停止します。

表 10. レコードの終わり条件の IOSTAT 値

IOSTAT 値 レコードの終わり条件の記述
-4 外部ファイルの非アドバンス、形式指示 READ で検出されたレコードの終わり

ファイルの終わり条件

以下のインスタンスでファイルの終わり条件が発生する可能性があります。

FORTRAN 2003 の開始 ストリーム・アクセスの場合、ファイルの終わりを超えて読み取りを行おうとすると、 ファイルの終わり条件が発生します。 ファイルの終わり条件は、定様式アクセス用に接続されたストリーム・ファイルの 最終レコードを超えて読み取りを行おうとした場合にも発生します。 FORTRAN 2003 の終了

入力ステートメントに IOSTAT= 指定子および END= 指定子がある場合、 ファイルの終わり条件により、IOSTAT= 指定子が以下の定義された値のいずれかに 設定され、ファイルの終わり条件は END= ラベルに分岐します。 IOSTAT= および END= 指定子が入力ステートメント にない場合に、ファイルの終わり条件が検出されると、プログラムは停止します。

表 11. ファイルの終わり条件の IOSTAT 値

IOSTAT 値 ファイルの終わり条件の記述
-1 外部ファイルの順次またはストリーム READ でファイルの終わり、または 直接アクセス読み取りで END= が指定されているか、レコードが存在しない。
-1(1) 内部ファイルの READ で検出されたファイルの終わり。
-2 内部ファイルの READ で検出されたファイルの終わり。

注:

  1. Fortran 2003 ドラフト標準. 詳細については、IOSTAT_END 実行時オプションを参照してください。

エラー条件

致命的エラー

致命的エラーは、実行システム内で検出されるシステム・レベルの エラーで、このエラーが発生すると、プログラムを実行できなくなります。 致命的エラーが発生すると、短い (翻訳されていない) メッセージが 装置 0 に書き込まれ、その後に、C ライブラリー・ルーチン abort() に対する呼び出しが行われます。 メモリー・ダンプの結果は、実行環境がどのように構成されているかによって異なります。

重大なエラー

重大なエラーは、ERR_RECOVERY 実行時オプションの 値を YES に指定していた場合でも、回復させることはできません。 入出力ステートメントに IOSTAT= 指定子 および ERR= がある場合、重大なエラーにより、 IOSTAT= 指定子が以下に定義された値のいずれかに設定 され、ERR= ラベルが分岐します。 入出力ステートメントに IOSTAT= および ERR= 指定子 がない場合、重大エラー条件が検出されると、プログラムは停止します。

表 12. 重大なエラー条件の IOSTAT 値

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= 指定子で 指定されたスカラー変数の範囲外である。

回復可能エラー

回復可能エラーは、回復できるエラー状態のことです。 入出力ステートメントに IOSTAT= 指定子 および ERR= がある場合、回復可能エラーが発生すると、 IOSTAT= 指定子が以下に定義された値のいずれかに設定 され、ERR= ラベルに分岐します。 入出力ステートメントに IOSTAT= および ERR= 指定子 がなく、ERR_RECOVERY 実行時オプションが YES に設定 されていると、回復処理が行われ、プログラムが継続します。 入出力ステートメントに IOSTAT= および ERR= 指定子 がなく、ERR_RECOVERY オプションが NO に設定されている と、プログラムは停止します。

表 13. 回復可能エラー条件の IOSTAT 値

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 FORTRAN 2003 の開始 ストリーム・アクセス用に装置が接続されていないため、その装置に対してストリーム I/O ステートメントを実行できない。

FORTRAN 2003 の終了

197 I/O ステートメントの POS= 指定子が、検出できないファイルに接続されている装置を 指定した。
198 未接続の装置でのストリーム I/O ステートメント。

変換エラー

データが無効であるか、データ転送ステートメントでデータの長さ が正しくないと、変換エラーが発生します。 入出力ステートメントに IOSTAT= 指定子 および ERR=ラベルがあり、 CNVERR オプションが YES に設定されている 場合、変換エラーが発生すると、IOSTAT= 指定子が以下に定義した 値のいずれかに設定され、ERR= ラベルに分岐します。 入出力ステートメントに IOSTAT= および ERR= 指定子 がなく、CNVERR および ERR_RECOVERY の両オプション が YES に設定されていると、回復処理が行われ、プログラムが継続します。 入出力ステートメントに IOSTAT= および ERR= 指定子 がなく、CNVERR オプションが YES に設定 され、ERR_RECOVERY オプションが NO に設定されていると、 プログラムが停止します。 CNVERR オプションが NO に設定される と、ERR ラベルには分岐せずに、以下に示すように IOSTAT= 指定子 が設定される場合があります。

表 14. 変換エラー条件の 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、95、および 2003 ドラフト標準の言語エラー

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 が指定されると、 そのエラー条件はエラーとは見なされません。

Fortran 2003 ドラフト標準言語エラーは、コンパイル時に検出できない Fortran 2003 言語のドラフト標準に対して、XL Fortran の拡張を使用することによって起こります。 LANGLVL 実行時オプションが 2003STD という値で 指定されていて、ERR_RECOVERY 実行時オプションが設定されて いないか、NO に設定されている場合に、Fortran 2003 言語エラーは、 重大エラーと見なされます。LANGLVL=2003STD および ERR_RECOVERY= YES が両方とも指定されている場合には、 エラーは回復可能エラーと見なされます。 LANGLVL= EXTENDED が指定されると、 そのエラー条件はエラーとは見なされません。

表 15. Fortran 90、95、および 2003 ドラフト標準の言語エラー条件の 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 Copyright 2003