CLOSE ステートメントは、ボリュームおよびファイルの処理を終了します。
フォーマット 1: 順次ファイルの CLOSE ステートメント >>-CLOSE--------------------------------------------------------> .------------------------------------------------------. V | >----ファイル名-1---+------------------------------------+-+---->< | (1) | +-+-REEL-----+--+------------------+-+ | | (1) | +-+-----+--REMOVAL-+ | | '-UNIT-----' | '-FOR-' | | | '-WITH NO REWIND---' | | (1) | '-+------+--+-NO REWIND-----+--------' '-WITH-' '-LOCK----------'
フォーマット 2: 索引付きおよび相対ファイルの CLOSE ステートメント .----------------------------------. V | >>-CLOSE----ファイル名-1---+----------------+-+----------------->< '-+------+--LOCK-' '-WITH-'
フォーマット 3: 行順次ファイルの CLOSE ステートメント >>-CLOSE--------------------------------------------------------> .--------------------------------------------------. V | >----ファイル名-1---+--------------------------------+-+-------->< +-+-REEL-+--+------------------+-+ | '-UNIT-' +-+-----+--REMOVAL-+ | | | '-FOR-' | | | '-WITH NO REWIND---' | '-+------+--+-NO REWIND-+--------' '-WITH-' '-LOCK------'
CLOSE ステートメントは、 オープン・モードのファイルに対してのみ実行することができます。 CLOSE ステートメント (フォーマット 1 を使用する場合は、 REEL/UNIT 句を使用しないもの) が正常に実行すると、次のようになります。
ファイル制御項目内に FILE STATUS 節が指定されている場合は、 関連するファイル状況キーが、CLOSE ステートメントの実行時に更新されます。
ファイルがオープン状態にあり、CLOSE ステートメントの実行が正常に実行しない場合は、 そのファイルに対して EXCEPTION/ERROR プロシージャーが (指定した場合) 実行されます。
あるファイルに対してファイル制御項目内に SELECT OPTIONAL 節が指定されている場合、 そのファイルが実行時に使用可能でないと、標準のファイル終了処理は行われません。QSAM ファイルの場合は、ファイル位置標識および現行ボリューム・ポインターは変更されません。
ファイルは、以下のタイプに分けられます。
CLOSE ステートメント句の許可される組み合わせについては、以下のテーブルを参照してください。
各キー文字の意味は、表 4に示されています。
| CLOSE ステートメント句 | リール/ユニット以外 | 順次単一ボリューム | 順次マルチボリューム |
|---|---|---|---|
| CLOSE | C | C、G | A、C、G |
| CLOSE REEL/UNIT | F | F、G | F、G |
| CLOSE REEL/UNIT WITH NO REWIND | F | B、F | B、F |
| CLOSE REEL/UNIT FOR REMOVAL | D | D | D |
| CLOSE WITH NO REWIND | C、H | B、C | A、B、C |
| CLOSE WITH LOCK | C、E | C、E、G | A、C、E、G |
| キー | 取られる処置 |
|---|---|
| A | 前のボリュームは影響を受けない
入力ファイルおよび入出力ファイル: 標準のボリューム切り替え処理が、 前のすべてのボリュームに対して行われる (先行する CLOSE REEL/UNIT ステートメントにより 制御されるものを除く)。後続のボリュームはいずれも処理されない。 出力ファイル: 標準のボリューム切り替え処理が、 前のすべてのボリュームに対して行われる (先行する CLOSE REEL/UNIT ステートメントにより制御されるものを除く)。 |
| B | 現在のリールは巻き戻されない: 現在のボリュームは現在位置のままになる。 |
| C | ファイルをクローズする
入力ファイルおよび入出力ファイル: ファイルがその終了位置にあり、 ラベル・レコードが指定されていれば、標準の終了ラベル・プロシージャーが実行される。ついで標準のシステム・クローズ・プロシージャーが行われる。 ファイルがその終了位置にあっても、ラベル・レコードが指定されていない場合は、 ラベル処理は行われないが、標準のシステム・クローズ・プロシージャーが行われる。 ファイルがその終了位置にない場合、標準のシステム・クローズ・プロシージャーが実行されるが、 終了のラベル処理は行われない。 出力ファイル: ラベル・レコードが指定されていると、 標準の終了ラベル・プロシージャーが実行される。ついで標準のシステム・クローズ・プロシージャーが行われる。 ラベル・レコードが指定されていないと、終了ラベル・プロシージャーは実行されないが、 標準のシステム・クローズ・プロシージャーは実行される。 |
| D | ボリュームを取り外す: コメントとして扱われる。 |
| E | ファイルをロックする: コンパイラーは、 オブジェクト・プログラムの実行中にこのファイルが再びオープンできないようにする。ファイルが磁気テープ装置である場合は、巻き戻しおよびアンロードが行われる。 |
| F | ボリュームをクローズする
入力ファイルおよび入出力ファイル: 現在のリール/ユニットがファイルに対して 最後であるか、または唯一のリール/ユニットであるか、あるいはリールが非リール/ユニット・メディア上にある場合は、 ボリューム切り替え処理は行われない。ファイルに関して別のリール/ユニットが存在している場合は、 次の操作が実行される。ボリューム切り替え、 最初のボリューム・ラベル・プロシージャー、 さらに新規ボリューム上の最初のレコードが読み取り可能になる。 現行ボリュームにデータ・レコードが存在しない場合は、 別のボリュームへの切り替えが行われる。 出力 (リール/ユニット・メディア) ファイル: 終了ボリューム・ラベル・プロシージャー、 ボリューム切り替え、および開始ボリューム・ラベル・プロシージャーが実行される。次の WRITE ステートメントが実行されると、 次の論理レコードが使用可能な次の直接アクセス・ボリューム上に置かれる。 REEL 句でクローズ・ステートメントを使用しても、 出力ファイルはクローズされない。ボリューム終了条件が起きるだけである。 出力 (非リール/ユニット・メディア) ファイル: CLOSE ステートメントの実行は正しく行われたとみなされる。 ファイルはオープン・モードのままであり、 このファイルに関連付けられた入出力状況キーの値が更新される以外、何も処置は行われない。 |
| G | 巻き戻す: 現在のボリュームは物理的な先頭に位置付けられる。 |
| H | オプションの句を無視する: CLOSE ステートメントは、 オプションの句がなにも指定されていないものとして、実行される。 |