CLOSE(閉じる)文

CLOSE(閉じる)文は、リール/ユニットおよびファイルの処理を終了させる(ファイルのクローズ)。さらに、可能ならば、巻戻しやロックや取外し処理を行うこともできる。

一般形式

形式 1 (レコード順ファイル)

形式 2 (
dialm.gif行順ファイル、
相対ファイル、および索引ファイル)

構文規則

すべての形式(すべてのファイル)
  1. CLOSE文で参照されるファイルは、すべてが同じ構成またはアクセスである必要はない。

形式 1 (レコード順ファイル)
  1. REEL および UNITUNITを指定できるのは、SELECT句にMULTIPLE REELまたはMULTIPLE UNIT MULTIPLE UNIT を指定してあるファイルに対してだけである。マルチユニット・ファイルを認識しないランタイムシステムにおいては、CLOSE REEL文およびCLOSE UNIT文は" 空" 文である。つまり、これらの文は注記になる。CLOSE REEL文またはCLOSE UNIT文によって閉じた装置上には、他に開いているファイルはないことが重要である。

    CLOSE REEL WITH LOCK文およびCLOSE UNIT WITH LOCK文は、CLOSE REEL FOR REMOVALと同義語として扱われる。

  2. DISP 指定は、テープ・ファイルに対してだけ適用できる。

    DISP指定は注記になる。

一般規則

すべての形式(すべてのファイル)
  1. CLOSE 文は、開かれているファイルに対してだけ実行できる。

  2. CLOSE文の実行が正常に終了すると、ファイル名-1のレコード領域は使用できなくなる。CLOSE文の実行が不成功に終わった場合は、レコード領域はどうなるかわからない。

  3. STOP RUN(実行停止)文が実行されたときに開かれているファイルがあると、そのファイルは閉じられる。呼ばれたプログラムの中でファイルが開かれ、後でそのプログラムの中でCANCEL(取消し)文が実行された場合、開かれたままのファイルがあれば閉じられる。

  4. CLOSE文の実行が正常に終了すると、閉じられたファイルに関して実行単位が保持していたレコードロックまたはファイルロックはすべて解除される。

  5. CLOSE文が実行されると、ファイル名-1に関する入出力状態の値が更新される。(手続き部の章の入出力状態節を参照。)

  6. CLOSE文の書き方とファイルの種類ごとに、実行結果をまとめて、表 12-1に示す。

    > 表 12-1: CLOSE文の形式とファイルの種類の関係
    CLOSE文の形式 ファイルの種類
    非リール/ユニット レコード順単一リール/ユニット レコード順複数リール/ユニット 非レコード順単一/複数リール/ユニット
    CLOSE C C, G A, C, G C
    CLOSE WITH LOCK C, E C, E, G A, C, E, G C, E
    CLOSE WITH NO REWINDレコード順だけ C, H B, C A, B, C X
    CLOSE REEL/UNITレコード順だけ F F, G F, G X
    CLOSE REEL/UNIT FOR REMOVALレコード順だけ F D, F, G D, F , G X
    CLOSE REEL/UNIT WITH NO REWINDレコード順だけ X X F, B X

    上の表の中に示した記号の意味を以降に説明する。入力ファイルか出力ファイルか入出力ファイルかによって意味が異なるときは、それぞれに分けて説明する。分けていなければ、説明は入力ファイルと出力ファイルと入出力ファイルのすべてに当てはまる。

    1. 前のリール/ユニットは影響を受けない

      入力ファイルおよび入出力ファイル:

      ファイル中の現在のリール/ユニットよりも前にあるリール/ユニットがすべて処理される。ただし、既にCLOSE REEL/ UNIT文が実行されているものを除く。現在のリール/ユニットがファイル中の最後のものでない場合、その後ろのリール/ユニットは処理されない。

      出力ファイル:

      ファイル中の現在のリール/ユニットよりも前にあるリール/ユニットがすべて処理される。ただし、既にCLOSE REEL/UNIT文が実行されているものを除く。

    2. 現在のリールを巻き戻さない

      現在のリール/ユニットはそのままの位置にとどめられる。

    3. ファイルを閉じる

      入力ファイルおよび入出力ファイル(順呼出し法):

      ファイルの末尾に達しており、かつファイル記述にラベル・レコードを指定してある場合、オペレーティングシステムのラベル方式に従って、ラベルの処理が行われる。ラベル・レコードを指定しているのにラベル・レコードが存在しない場合、またはラベル・レコードを指定していないのにラベル・レコードが存在する場合、CLOSE文の動作はどうなるかわからない。ファイルの末尾に達しているが、ファイル記述にラベル・レコードが指定されていない場合、ラベルの処理は行われないが、ランタイムシステムに依存するその他の閉じる処理は行われる。ファイルの末尾に達していない場合、ランタイムシステムに依存する閉じる処理は行われるが、終了ラベルの処理は行われない。

      入力ファイルおよび入出力ファイル(乱呼出し法、動的呼出し法); 出力ファイル(乱呼出し法、動的呼出し法、順呼出し法):

      ファイル記述にラベル・レコードを指定している場合、オペレーティングシステムのラベル方式に従ってラベルの処理が行われる。ラベル・レコードを指定しているのにラベル・レコードが存在しない場合、またはLABEL RECORD句を指定していないのにラベル・レコードが存在する場合、CLOSE文の動作はどうなるかわからない。ファイル記述にラベル・レコードを指定していない場合、ラベルの処理は行われないが、ランタイムシステムに依存するその他の閉じる処理は行われる。

    4. リール/ユニットを取り外す

      REELまたはUNITを指定しないでCLOSE文をファイルに対して実行し、続いてそのファイルに対してOPEN文を実行すると、そのファイル内のリールまたはユニットを適切な順番で再度呼び出すことができる。

    5. ファイルをロックする

      この実行単位の実行中は、このファイルを再び開くことはできない。

    6. リール/ユニットを閉じる

      入力ファイルおよび入出力ファイル(リール/ユニット媒体):

      1. 現在のリール/ユニットが該当するファイルの最後または唯一のリール/ユニットである場合、リール/ユニットの交換は行われない。現在のボリューム・ポインタは変更されず、ファイル位置指示子には次のリール/ユニットが存在しないと設定される。

      2. 該当するファイルに他のリール/ユニットが存在する場合、リール/ユニットの交換が発生し、現在のボリューム・ポインタはそのファイル中の次のリール/ユニットを指すように更新される。その後標準開始リール/ユニット・ラベル手続きが実行されて、ファイル位置指示子が新しい現行ボリューム上に存在する最初のレコードの番号よりも1小さく設定される。現行ボリュームにデータ・レコードが存在しなければ、次のリール/ユニットの交換が発生する。

      出力ファイル(リール/ユニット媒体):

      下記の操作が行われる。

      1. 標準終了リール/ユニット・ラベル手続きの実行

      2. リール/ユニットの交換

      3. 標準開始リール/ユニット・ラベル手続きの実行

      4. そのファイルに対して次にWRITE文を実行すると、次の論理レコードはそのファイルの次のリール/ユニットに書き出される。

      入力ファイル、入出力ファイル、出力ファイル(非リール/ユニット媒体):

      このCLOSE文の実行は、正常に終了したものと扱われる。実際には、ファイルは開かれたままであり、ファイル位置指示子は変更されず、一般規則4に示された以外の処理は何も行われない。

    7. 巻き戻す

      現在のリールまたは類似の装置は、物理的始点に位置付けられる。

    8. 任意指定は無視される

      CLOSE文は、任意指定が何もされていないかように実行される。

    1. 不正

      CLOSE文の指定とファイルの種類のこの組合わせは正しくない。実行結果がどうなるかはわからない。

形式 1 (レコード順ファイル)

以下の記述において別途断らないかぎり、"リール" と"ユニット" という語は同義であり、CLOSE文の中でまったく同じように使うことができる。順編成の大記憶ファイルの取扱いは、論理的にはテープまたは類似の順媒体と同じである。

  1. 様々な記憶媒体に適用される種々のCLOSE文の効果を示すために、すべてのファイルを下記の種類に区分する。

    1. 非リール/ユニット:巻戻しやリール/ユニットの概念が意味をもたない入出力媒体を使用したファイル。

    2. 順単一リール/ユニット:1つのリール/ユニットに完全に格納される順ファイル。

    3. 順複数リール/ユニット:複数のリール/ユニットにまたがって格納される順ファイル。

  2. 環境部のファイル管理段落中でファイルにOPTIONAL指定をしているが、そのファイルが存在しない場合には、そのファイルに関しては標準のファイル終了処理は行われない。

  3. あるファイルに対してREELもUNITも指定せずにCLOSE 文を実行すると、以降そのファイルを対象とする入出力文(SORT文またはMERGE文でUSINGまたはGIVINGを指定したものは除く)は明示的にも暗黙的にも実行できなくなる。ただし、そのファイルに改めてOPEN文を実行すれば、再び入出力文を実行できるようになる。

  4. ファイルが存在する媒体に対して適用しなければ、WITH NO REWIND指定もFOR REMOVAL指定も実行時に効力をもたない。

  5. WITH LOCKを指定すると、そのファイルはその実行単位の現在の実行中には再度開くことはできなくなる。この点を除けば、通常のCLOSEと同じである。

    (この機能は、ファイルを共有するときのレコードまたはファイルのロックとは関係がない。)

すべての形式(すべてのファイル)
  1. あるファイルに対してCLOSE文を実行すると、以降そのファイルを対象とする文は、

    DELETE FILE文を除き、

    明示的にも暗黙的にも実行できなくなる。ただし、そのファイルに改めてOPEN文を実行すれば、再びファイルを操作する文を実行できるようになる。

  2. WITH LOCKを指定すると、そのファイルはその実行単位の現在の実行中には再度開くことはできなくなる。