OPEN 文

OPEN 文は、ファイルの処理を開始する。また、ラベルの確認や書き込み、およびその他の入出力操作を行う。

ANS85 OPEN 文の REVERSED 指定は、ANSI'85 規格では廃要素に分類されており、ANSI 規格の次回の全面改訂の際に削除される予定である。

MF この構文は、この COBOL 実装のすべての方言で全面的にサポートされている。FLAGSTD コンパイラ指令を使用すると、この構文を使用するすべての箇所を検出できる。

XOPEN OPEN 文の REVERSED 指定は、標準 COBOL 定義の一部であるが、X/Open の COBOL 言語定義では明示的に除外されている。したがって、X/Open の COBOL 準拠のソース プログラム内では使用するべきではない。

MF OPEN 文は、同期データ項目用にシステム リソースを割り当て、そのデータ項目を初期化する。

書き方 1 の一般形式 (レコード順編成ファイル)


*

書き方 2 の一般形式 (MF 行順編成ファイル、相対ファイルおよび索引ファイル)


*
MF 

書き方 3 の一般形式 (同期データ項目)


*

すべての書き方に関する構文規則 (すべてのファイル)

  1. OPEN 文で参照するファイルは、編成または呼び出し法をすべて同じにする必要はない。
  2. ISO2002MF SHARING ALL を指定して INPUT は指定しない場合は、file-name-1 のファイル管理記述項に LOCK MODE 句を指定する。

書き方 1 の構文規則 (レコード順編成ファイル)

  1. MF NO REWIND は注記になる。
  2. I-O 指定は、ディスク ファイルにのみ使用できる。
  3. ANS85 EXTEND 指定は、LINAGE 句を指定していないファイルにのみ使用できる。
  4. EXTEND 指定は、複数のファイル リールに指定できない。
  5. REVERSED 指定は、固定長レコードの順編成ファイルにのみ使用できる。

書き方 2 の構文規則 (MF 行順編成ファイル、相対ファイルおよび索引ファイル)

  1. ANS85 EXTEND 指定は、順呼び出し法のファイルに使用できる。
  2. ISO2002MF SHARING 指定は、行順編成のファイルには指定できない。
MF 

書き方 3 の構文規則 (同期データ項目)

  1. MF identifier-1 は、EVENT-POINTER、MONITOR-POINTER、MUTEX-POINTER、または SEMAPHORE-POINTER の USAGE を持つ基本データ項目を参照するものとする。

書き方 1 および 2 の一般規則 (すべてのファイル)

  1. 所定のファイルに対して OPEN 文の実行が正常に完了するまで、そのファイルを明示的または暗黙的に参照する文は実行できない (USING または GIVING を指定した SORT 文および MERGE 文は例外とする)。
  2. ISO2002MF OPEN 文の実行が正常に完了すると、ファイルを利用できるかどうかが判定され、file-name が参照するファイル結合子がオープン モードになる。また、ファイル結合子を介してファイルが file-name と関係付けられる。

    必要語の INPUT、OUTPUT、I-O、および EXTEND は、ファイル結合子を介してファイルに対する入出力操作の種類を指定し、オープン モードを確立する。表 14-4「文およびオープン モードの使用可能な組み合わせ」を参照。

    ファイルが物理的に存在しており、ファイル処理システムに認識されていれば、そのファイルは利用可能である。表 1「(現在開いていない) 利用可能なファイルおよび利用不可能なファイルを開く処理」に、現在開いていない利用可能なファイルおよび利用不可能なファイルを開いた際の結果を示す。表 2「現在は他のファイル結合子が開いている利用可能な共有ファイルを開く処理」に、現在は他のファイル結合子が開いている利用可能なファイルおよび利用不可能なファイルを開いた際の結果を示す。

    表 1. (現在開いていない) 利用可能なファイルおよび利用不可能なファイルを開く処理
    オープン モード ファイルが利用可能な場合 ファイルが利用不可能な場合
    INPUT 通常どおり開く ファイルを開けない
    INPUT (不定ファイル) 通常どおり開く 通常どおり開く。最初の読み取り時に、ファイル終了条件または無効キー条件が発生する
    I-O 通常どおり開く ファイルを開けない
    I-O (不定ファイル) 通常どおり開く 開く処理によりファイルが作成される
    OUTPUT 通常どおり開く。ファイルにはレコードは含まれない 開く処理によりファイルが作成される
    EXTEND 通常どおり開く ファイルを開けない
    EXTEND (不定ファイル) 通常どおり開く 開く処理によりファイルが作成される
    表 2. 現在は他のファイル結合子が開いている利用可能な共有ファイルを開く処理
    開く要求 最も厳格な既存の共有モードおよびオープン モード
    他と共有しない 読み取りのみで共有 他のすべてと共有
    拡張/入出力/入力/出力 拡張/入出力/出力 入力 拡張/入出力/出力 入力
    SHARING WITH NO OTHER EXTEND/ I-O/ INPUT/ OUTPUT/ 開けない 開けない 開けない 開けない 開けない
    SHARING WITH READ ONLY EXTEND/ I-O 開けない 開けない 開けない 開けない 通常どおり開く
    INPUT 開けない 開けない 通常どおり開く 開けない 通常どおり開く
    OUTPUT 開けない 開けない 開けない 開けない 開けない
    SHARING WITH ALL OTHER EXTEND/ I-O 開けない 開けない 開けない 通常どおり開く 通常どおり開く
    INPUT 開けない 通常どおり開く 通常どおり開く 通常どおり開く 通常どおり開く
    OUTPUT 開けない 開けない 開けない 開けない 開けない
  3. OPEN 文の実行が正常に完了すると、関連付けられたレコード領域を利用できるようになる。
  4. 表 3 で、行と列が交差する枠内の「X」は、該当行の所定の呼び出し法で使用される指定の文を、列の先頭の所定のオープン モードで使用できることを示す。
    ファイルの呼び出し法 オープン モード
    入力 出力 入出力 拡張
    順呼び出し READ X   X  
    WRITE   X   X
    REWRITE     X  
    乱呼び出し (非順編成ファイル) READ X   X  
    WRITE   X X  
    REWRITE     X  
    START        
    DELETE     X  
    動的呼び出し (非順編成ファイル) READ X   X  
    WRITE   X X  
    REWRITE     X  
    START X   X  
    DELETE     X  
    注: START および DELETE 文は、レコード順編成ファイル

    MF または行順編成ファイル

    には適用できない。
  5. MF WITH LOCK を指定すると、OPEN 文は該当するファイル全体に対するロックを取得する。これは、そのファイルに対して SELECT 文で LOCK MODE IS EXCLUSIVE を指定することに等しい。「環境部」の章の「ファイル管理記述項」トピックを参照。
  6. ANS85 OPEN 文の実行中にファイル属性の競合を検出した場合、OPEN 文の実行は失敗する。OPEN 文の実行中にどのファイル固有属性が妥当性を検査されるかは、COBOL システムによって定義される。詳細については、ファイルの取扱いに関する説明書を参照。ファイル固有属性の妥当性検査は、ファイルの編成または記憶媒体 (あるいはその両方) に応じて異なる。
  7. ANS85 ファイルは、同じ実行単位内で INPUT、OUTPUT、EXTEND、および I-O 指定で開くことができる。ファイル結合子に対して最初に OPEN 文を実行した後、そのファイル結合子に対して CLOSE 文を実行しないと、同じファイル結合子に対して再び OPEN 文を実行することはできない。これは、対象のファイルが不定ファイルの場合も同様である。
  8. OPEN 文を実行しても、最初のデータ レコードは入手も解放もされない。
  9. SELECT 句で指定したファイルの外部名は、以下のように処理される。
    1. INPUT を指定した場合、OPEN 文を実行すると、入力用ファイルを開くためのオペレーティング システムの規則に従って、名前が検査される。
    2. OUTPUT を指定した場合、OPEN 文を実行すると、出力用ファイルを開くためのオペレーティング システムの規則に従って、名前が検査される。
  10. file-name-1、file-name-2、file-name-3、および file-name-4 のファイル記述項は、そのファイルの作成時の状態と同じにする。
  11. INPUT または I-O を指定して開いているファイルに対して、OPEN 文はファイル位置指示子を、索引ファイルおよび順編成ファイルについてはファイル内に現存する最初のレコードに設定し、相対ファイルについてはレコード番号 1 に設定する。ファイル内にレコードが存在しない場合、索引ファイルまたは順編成ファイルに対して READ を次に実行した際にファイル終了条件が発生するように、ファイル位置指示子が設定される。ファイルが存在しない場合、OPEN INPUT 句はエラー状態となる (不定ファイルの場合は除く)。
  12. I-O を指定し、LABEL RECORDS 句でラベル レコードが存在していると指定した場合、OPEN 文の実行には以下の処理が含まれる。
    1. ラベルの検査は、入出力両用ラベルの検査に関するオペレーティング システム指定の規則に従って行われる。
    2. 新規ラベルの書き込みは、入出力両用ラベルの書き込みに関するオペレーティング システム指定の規則に従って行われる。
  13. OUTPUT を指定した OPEN 文の実行が成功すると、ファイルが作成される。この時点では、関連付けられたファイルにはレコードは含まれていない。同じ名前のファイルが存在している場合、そのファイルは削除される。そのファイルが書き込み保護されていると、エラーが発生する。
  14. ANS85 OPEN 文に EXTEND を指定した場合、ファイルの最後の論理レコードの直後に、ファイルが位置指定される。順編成ファイルの場合、最後の論理レコードは、ファイルに最後に書き込まれたレコードである。相対ファイルの場合、最後の論理レコードは、現存するレコードのうち相対レコード番号が最も大きいものである。索引ファイルの場合、最後の論理レコードは、現存するレコードのうち主キーの値が最も大きいものである。
  15. OPEN 文を実行すると、FILE STATUS データ項目の値が更新される (「手続き部」の章の「入出力状態」トピックを参照)。
  16. MF ファイルの SELECT または ASSIGN 文で LOCK MODE IS EXCLUSIVE を指定すると、OPEN 文の実行が成功した際に、ファイルはその実行単位用に排他的にロックされる。
  17. MF ファイルの SELECT または ASSIGN 文で LOCK MODE IS AUTOMATIC または LOCK MODE IS MANUAL を指定すると、参照先のファイルを共有できる。そのような共有可能ファイルは、複数の実行単位から正常に開くことができる。
  18. MF OUTPUT 用に開いたファイル、および EXTEND 用に開いた相対および索引ファイルは、排他的にロックされたものとして暗黙的に定義される。つまり、そのファイルは共有できない。
  19. MF I-O 用に開いた共有可能ファイルのみがレコード ロックを取得できる。
  20. OPEN 文の実行が失敗した場合、物理ファイルは影響を受けず、以下の処理が順に行われる。
    1. file-name に関連付けられた入出力状態に、OPEN 文の実行が失敗した条件を示す値が設定される。
    2. 該当する USE AFTER EXCEPTION 手続きがあれば、それが実行される。「USE 文」トピックを参照。
  21. I-O を指定してファイルを開くと、そのファイルに対して入出力の両方の操作を実行できる。ファイルが存在しない場合は、以下の規則が適用される。
    1. ファイルに対する SELECT 句で OPTIONAL を指定した場合、ファイルが作成される。
    2. ファイルに対する SELECT 句で NOT OPTIONAL を指定した場合、エラーが発生する。
    3. どちらも指定しておらず、ソース要素の翻訳時に OPTIONAL-FILE 指令を指定した場合、ファイルが作成される。
    4. どちらも指定しておらず、ソース要素の翻訳時に NOOPTIONAL-FILE 指令を指定した場合、エラーが発生する。
  22. 入力ファイルで SELECT 句に OPTIONAL を指定した場合、ファイルを開く際にそのファイルの有無について問い合わせが行われる。そのファイルが存在しない場合、最初に READ 文を実行する際に、ファイル終了条件が発生する。
  23. OPEN 文に EXTEND を指定した場合、ファイルの最後の論理レコードの直後に、ファイルが位置指定される。以降、そのファイルを参照する WRITE 文を実行すると、OUTPUT を指定してファイルを開いた場合と同様に、レコードがそのファイルに追加される。ファイルが存在しない場合は、作成される。
  24. ANS85 EXTEND を指定し、ファイルのファイル記述項に LABEL RECORDS 句が含まれている場合、OPEN 文の実行に以下の処理も含められる。
    1. 単一のリール/ユニット ファイルの場合のみ、開始ファイル ラベルが処理される。
    2. 既存の最後のリール/ユニットの開始リール/ユニット ラベルは、そのファイルを INPUT を指定して開いた場合と同様に処理される。
    3. 既存のファイル終了ラベルは、そのファイルを INPUT を指定して開いた場合と同様に処理される。終了ラベルは、その後に削除される。
    4. 次に、そのファイルを OUTPUT を指定して開いた場合と同様に処理が継続する。
  25. I-O を指定してファイルを開くと、そのファイルに対して入出力の両方の操作を実行できる。

    MF ただし、ORGANIZATION LINE SEQUENTIAL を指定したファイルは除く。

    ファイルが存在しない場合は、そのファイルが作成され、空のファイルとして入力に使用される。

    MF ただし、SELECT 文で NOT OPTIONAL を指定した場合は除く。

    新規作成したファイルから読み取りを行うと、エラーが発生する。

  26. ISO2002MF SHARING は、共有ファイルに対してのみ指定できる。「言語の基礎」の章の「共有モード」トピックを参照。
  27. ISO2002MF SHARING 指定は、ファイルを共有している他のファイル結合子を通じて、対象のファイルに何の操作を行えるかを指定する。「言語の基礎」の章の「共有モード」トピックを参照。
  28. ISO2002MF この SHARING 指定は、file-name に関連付けられたファイル結合子のファイル管理記述項の SHARING 句をオーバーライドする。OPEN 文に SHARING が指定されていない場合、ファイルの共有はファイル管理記述項によって全面的に指定される。OPEN 文に SHARING が指定されておらず、ファイル管理記述項にも SHARING 句が指定されていない場合、該当のファイル結合子に対する共有モードは、「言語の基礎」の章の「共有モード」トピックに記載の規則に従って設定される。

書き方 1 の一般規則 (レコード順編成ファイル)

  1. ファイルの記憶媒体が巻き戻し可能なものであるときは、以下の規則が適用される。
    1. OPEN 文を実行すると、ファイルの先頭にファイルが位置指定される。
    2. REVERSED を指定した場合、OPEN 文を実行すると、ファイルの末尾にファイルが位置指定される。
  2. REVERSED を指定した場合、そのファイルに対する後続の READ 文は、逆の順、つまり最後のレコードから開始して、データを読み込む。
MF 

書き方 2 の一般規則 (行順編成ファイル)

  1. MF  行順編成ファイルに対しては、I-O モードは使用できない。ただし、REWRITE-LS 指令を設定した場合は除く。
MF 

書き方 3 の一般規則 (同期データ項目)

  1. MF 特定の同期データ項目に対して OPEN 文が正常に実行される前に、そのデータ項目を参照する文は実行できない。
  2. MF OPEN 文の実行が成功すると、同期データ項目の可用性が決まる。
  3. MF OPEN 文を実行すると、RETURN-CODE 特殊レジスタが、同期項目ライブラリ ルーチンに指定されたいずれかの値で更新される。
  4. MF 同期データ項目に対して最初に OPEN 文を実行した後、そのデータ項目に対して CLOSE 文を実行しないと、同じデータ項目に対して再び OPEN 文を実行することはできない。
  5. MF identifier-1 がイベント データ項目を参照する場合、OPEN 文の実行により、データ項目は FALSE に初期化される。
  6. MF identifier-1 がモニター データ項目を参照する場合、OPEN 文の実行により、モニターは NOT BROWSING、NOT READING、および NOT WRITING に初期化される。
  7. MF identifier-1 がミューテックス データ項目を参照する場合、OPEN 文の実行により、データ項目は OFF に初期化される。
  8. MF identifier-1 がセマフォ データ項目を参照する場合、OPEN 文の実行により、データ項目はゼロに初期化される。