インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
IOSTAT 指定子を使用すると、I/O エラーの発生後にプログラムの実行を続け、I/O 操作に関する情報を返すことができます。エラーによっては、IOSTAT に返されないものもあります。
IOSTAT 指定子は、END、EOR、および ERR による分岐転送を補足または置き換えることができます。
IOSTAT 指定子を含む I/O 文が実行されると、エラーメッセージは表示されず、整数変数、配列要素、またはスカラーフィールド参照に次のいずれかの値が設定されます (この値は、プログラムが終了するときに終了コードとして返されます)。
ノンアドバンシング読み取りの際にレコード終了条件が発生した場合の値は '-2'。
ファイル終了条件が発生した場合の値は '-1'。
通常の完了の場合の値は '0' 通常の完了の場合の値は
エラー状態が発生した場合の値は、正の整数。(この値は、ランタイム時のエラーメッセージのリストにある Fortran 固有の IOSTAT 番号の 1 つです。エラーメッセージの一覧は、「ランタイム・エラー・メッセージのリスト」を参照してください)。
I/O 文の実行と IOSTAT 値の割り当てが行われた後、制御は (指定されている場合) END 文、EOR 文、または ERR 文の文番号に移ります。制御が移らない場合、通常の実行が続けられます。
プログラムに for_iosdef.for ファイルをインクルードすると、IOSTAT 値のシンボリック定義を利用できるようになります。
次の例は、IOSTAT 指定子と for_iosdef.for ファイルを使用して、OPEN 文のエラー (FILE 指定子の中) を処理します。
CHARACTER(LEN=40) :: FILNM INCLUDE 'for_iosdef.for' DO I=1,4 FILNM = '' WRITE (6,*) 'Type file name ' READ (5,*) FILNM OPEN (UNIT=1, FILE=FILNM, STATUS='OLD', IOSTAT=IERR, ERR=100) WRITE (6,*) 'Opening file: ', FILNM ! ! 入力ファイルを処理するユーザーコードをここに記述 ! CLOSE (UNIT=1) STOP 100 IF (IERR .EQ. FOR$IOS_FILNOTFOU) THEN WRITE (6,*) 'File: ', FILNM, ' does not exist ' ELSE IF (IERR .EQ. FOR$IOS_FILNAMSPE) THEN WRITE (6,*) 'File: ', FILNM, ' was bad, enter new file name' ELSE PRINT *, 'Unrecoverable error, code =', IERR STOP END IF END DO WRITE (6,*) 'File not found.Locate correct file with Explorer and run again' END PROGRAM
エラーを取得する別の方法として、ERRSNS サブルーチンを使う方法があります。このサブルーチンは、インテル® Fortran RTL エラー (詳細は、「Language Reference」(英語) を参照してください。) に関連した最後の I/O システムのエラーコードを取得します。