COBOL2002 ユーザーズガイド


13.3.2 インタフェース領域の形式

COBOL入出力サービスルーチンで使用するインタフェース領域を,次に示します。

表13‒2 COBOL入出力サービスルーチンで使用するインタフェース領域

インタフェース領域の名称

(構造体のtypedef名称)

サイズ(バイト)

用途

Windows(x86) COBOL2002の場合

Windows(x64) COBOL2002の場合

管理情報インタフェース領域

(CBLCOMFL)

256

312

  • ファイル情報を管理する

  • OPEN時のファイル情報を指定する

  • エラー発生時,エラー情報を指定する

  • COBOL2002の内部情報として使用される

パラメタインタフェース領域

(CBLPARMFL)

32

48

  • 入出力パラメタを指定する

〈この項の構成〉

(1) 管理情報インタフェース領域

管理情報インタフェース領域の形式を,「表13‒3 管理情報インタフェース領域の形式(1)」,および「表13‒4 管理情報インタフェース領域の形式(2)」に示します。

表13‒3 管理情報インタフェース領域の形式(1)

データ項目名

Windows(x86) COBOL2002の場合

Windows(x64) COBOL2002の場合

設定/参照する値

CBLOPENサービスルーチンでの指定

区分

名称

位置

長さ

データ形式

位置

長さ

データ形式

OUTPUT指定

OUTPUT以外

属性チェック無

属性チェック有

ファイル情報

ファイル編成とレコード形式

0

4

char[4]

0

4

char[4]

SAMF:順ファイル固定長レコード形式

SAMV:順ファイル可変長レコード形式

RELF:相対ファイル固定長レコード形式

RELV:相対ファイル可変長レコード形式

※1

最大レコード長

4

4

int

4

4

int

レコード長

(固定長形式の場合レコード長)

※1

最小レコード長

8

4

int

8

4

int

レコード長

(固定長形式の場合は無視される)

未使用

12

4

char[4]

サービスルーチン予備領域

NULL(X'00')を指定してクリアしておくこと

NULL(X'00')を指定してクリアしておくこと

NULL(X'00')を指定してクリアしておくこと

ファイル名称アドレス

12

4

char*

16

8

char*

オープンするファイル名称のアドレスファイル名称はNULLで終わる文字列とする。

CBLOPENサービスルーチンを呼び出す時だけ指定が必要。

CBLOPENサービスルーチンの呼び出しが成功したあと,CBLCLOSEサービスルーチン実行までの入出力文で,COBOL2002は,このアドレス,およびアドレスが指す領域を参照しない。

属性チェックオプション※2

16

1

char

24

1

char

CBLCOM_NOCHK:

管理情報インタフェース領域とファイル実体の属性をチェックしない。

CBLCOM_CHK:

管理情報インタフェース領域とファイル実体の属性をチェックする。

CBLCOM_NOCHK

CBLCOM_CHK

ファイルOPEN文のモード

17

1

char

25

1

char

CBLCOM_OPEN_INPUT:

読み取り専用(OPEN INPUT)

CBLCOM_OPEN_IO:

読み取りと書き込み(OPEN I-O)

CBLCOM_OPEN_OUTPUT:

書き込み専用・新規作成(OPEN OUTPUT)

CBLCOM_OPEN_EXTEND:

追加書き(OPEN EXTEND)

CBLCOM_OPEN_OUTPUT

ファイル施錠モード

18

1

char

26

1

char

CBLCOM_LOCK_NO:

LOCK MODE句指定なし

CBLCOM_LOCK_EXCL:

排他施錠(LOCK MODE IS EXCLUSIVE)

CBLCOM_LOCK_AUTO:

自動施錠(LOCK MODE IS AUTOMATIC)

CBLCOM_LOCK_MANU:

手動施錠(LOCK MODE IS MANUAL)※3

ディスク書き込みオプション

19

1

char

27

1

char

CBLCOM_ENVFSYNC:

環境変数CBLFSYNCに従う。

CBLCOM_NOFSYNC:

ディスク書き込み保証を適用しない。

CBLCOM_FSYNC:

クローズ時のディスク書き込み保証を適用する。

CBLCOM_WDISK:

書き込み時のディスク書き込み保証を適用する。

詳細は「13.7 COBOL入出力サービスルーチンでのディスク書き込み保証」を参照。

(読み取り専用では無視)

(読み取り専用では無視)

ファイルアクセスモード

20

1

char

28

1

char

CBLCOM_ACCESS_SEQ:

順アクセス法(ACCESS MODE IS SEQUENTIAL)

CBLCOM_ACCESS_RAND:

乱アクセス法(ACCESS MODE IS RANDOM)

CBLCOM_ACCESS_DYNA:

動的アクセス法(ACCESS MODE IS DYNAMIC)

順ファイルでは順アクセス法だけが指定できる。

未使用

21

7

char[7]

29

11

char[11]

サービスルーチン予備領域

NULL(X'00')を指定してクリアしておくこと

NULL(X'00')を指定してクリアしておくこと

NULL(X'00')を指定してクリアしておくこと

(凡例)

○:必ず指定する項目

△:COBOL2002が値を返す項目

−:無視される項目

表中の「CBLCOM_xxx」は,COBOL2002で使用できるインクルードファイル(CBL85fl.h)中で定義されているマクロです。CBL85fl.hファイルは,次のフォルダの下に提供されています。

COBOL2002インストールフォルダ\include
注※1

順固定長ファイルに対して入出力する場合は,必ず指定してください。

注※2

順固定長ファイルではこの指定は無視され,レコード長に従います。

注※3

順ファイルでは手動施錠を指定できません。

表13‒4 管理情報インタフェース領域の形式(2)

データ項目名

Windows(x86) COBOL2002の場合

Windows(x64) COBOL2002の場合

設定/参照する値

備考

区分

名称

位置

長さ

データ形式

位置

長さ

データ形式

エラー情報

入出力状態

(FILE STATUS)

28

2

short

40

2

short

0〜99

正常/エラーに関係なく,必ず値が返される。

返される値の詳細は「付録H 入出力状態の値」を参照

システムエラー情報有無

30

1

char

42

1

char

CBLCOM_ERR_NOSYSTEM:

システムエラー情報なし

CBLCOM_ERR_SYSTEM:

システムエラー情報有り

未使用

31

1

char

43

1

char

サービスルーチン予備領域

COBOLメッセージ番号

32

2

short

44

2

short

3001〜4099

COBOLエラーメッセージ番号

13.5.1 COBOL入出力サービスルーチンで出力されるエラーメッセージ番号」を参照

システムコール番号

34

2

short

46

2

short

1〜999

エラーとなったシステムコールを表すCOBOL2002が定める関数番号

システムエラー情報有りの場合に有効。

番号と内容については,マニュアル「COBOL2002 メッセージ」を参照

システムエラーコード

36

4

int

48

4

int

システムが返すエラーコード

システムエラー情報有りの場合に有効。

システムのマニュアルを参照

COBOLエラー詳細情報

40

1

char

52

1

char

インタフェース領域指定誤り,およびファイル属性エラー発生時の詳細情報

COBOLメッセージ番号が3701〜3703,および3801〜3803の場合に有効。

設定される値は,「表13‒5 COBOLエラー詳細情報の一覧」を参照

未使用

41

15

char[15]

53

15

char[15]

サービスルーチン予備領域

デバッグ情報

デバッグ情報出力指示

56

1

char

68

1

char

CBLCOM_DBG_NO:

デバッグ情報を出力しない

CBLCOM_DBG_BEF:

各入出力サービスルーチン実行の前にデバッグ情報を出力する

CBLCOM_DBG_AFT:

各入出力サービスルーチン実行後にデバッグ情報を出力する

CBLCOM_DBG_BEFAFT:

各入出力サービスルーチン実行の前とあとでデバッグ情報を出力する

13.5.2 インタフェース領域のダンプ出力」を参照

未使用

57

11

char[11]

69

11

char[11]

サービスルーチン予備領域

ユーザ領域

68

16

char[16]

80

16

char[16]

プログラムで使用可能な領域。

COBOL2002では管理しない

システムで使用する領域

84

172

char[132]

char *[10]

96

216

char[136]

char *[10]

システムで使用する領域。

最初のオープンを実行する前にNULL(X'00')を指定してクリアしておく

NULL(X'00')クリア以降,この領域を更新してはならない

表中の「CBLCOM_xxx」は,COBOL2002で使用できるインクルードファイル(CBL85fl.h)中で定義されているマクロです。CBL85fl.hファイルは,次のフォルダの下に提供されています。

COBOL2002インストールフォルダ\include

管理情報インタフェース領域のデータ項目に関する注意事項

(a)属性チェックオプション

属性チェックオプションには,ファイルのオープン時に管理情報インタフェース領域の値とファイル実体の属性をチェックするかどうかを指定します。

(i)属性をチェックしない場合

属性チェックオプションにCBLCOM_NOCHKを指定すると,ファイルの属性がチェックされません。この場合,CBLOPENサービスルーチンの呼び出し成功時に,ファイル実体に基づいて次のデータ項目が自動的に設定されます。

  • ファイル形式

    順ファイル可変長レコード形式の場合 :SAMV

    相対ファイル固定長レコード形式の場合:RELF

    相対ファイル可変長レコード形式の場合:RELV

  • 最大レコード長

  • 最小レコード長

  • 入出力状態

    00が返されます。

ユーザは,設定されたデータ項目の値から,入出力に必要なバッファ領域を用意するようなプログラムを作成する必要があります。また,ファイル形式が妥当かどうかをユーザプログラム側で必ず判定するようにしてください。

(ii)属性をチェックする場合

属性チェックオプションにCBLCOM_CHKを指定すると,次のデータ項目についてファイルの属性がチェックされます。

  • ファイル編成とレコード形式

  • 最大レコード長

  • 最小レコード長

また,CBLOPENサービスルーチンの呼び出し成功時に,入出力状態に00が返されます。

属性チェックの結果,管理情報インタフェース領域の設定とファイル実体の属性が一致しなかった場合,サービスルーチンはエラーの戻り値を返し,ファイルは開かれません。

注意事項
  • OPEN文のモードに「書き込み専用・新規作成(OPEN_OUTPUT)」を指定した場合,属性チェックオプションの指定は無視され,管理情報インタフェース領域に指定されたファイル編成,およびレコード長に従って新規にファイルが作成されます。

  • ファイル編成とレコード形式にSAMF(順ファイル固定長レコード形式)を指定した場合,属性チェックオプションの指定は無視され,指定したレコード長に従ってファイルの入出力処理が実行されます。

  • ファイル編成とレコード形式に順ファイル固定長レコード形式(SAMF)を指定しないで,かつ,属性チェックオプションにチェックしない(CBLCOM_NOCHK)を指定した場合,順固定長ファイルに対してCBLOPENサービスルーチンを実行すると,対象外ファイルとみなされます。

(b)エラー情報

エラー情報に設定される値は,サービスルーチンの終了状態によって次のように異なります。

サービスルーチンの終了状態

入出力状態

COBOLメッセージ番号

システムエラー情報有無

システムコール番号/システムエラーコード

正常終了

00

0

なし

(CBLCOM_ERR_NOSYSTEM)

0

エラー発生

入出力状態を表す値

メッセージ番号

(0以外)

なし

(CBLCOM_ERR_NOSYSTEM)

0

あり

(CBLCOM_ERR_SYSTEM)

該当するコードが設定される

COBOLメッセージ番号,システムコール番号,およびシステムエラーコードの値は,COBOL2002が独自に定めた値,またはシステム固有のコードです。そのため,エラー発生時のプログラム実行制御には,入出力状態の値を使用してください。

(c)COBOLエラー詳細情報

COBOLエラー詳細情報に返される情報,およびその意味を次に示します。

表13‒5 COBOLエラー詳細情報の一覧

COBOLメッセージ番号

エラー種別

マクロ名称

エラー項目/エラーの意味

3701

3801

管理情報インタフェース領域指定誤り

CBLCOM_ERRC_FORM

1

ファイル編成とレコード形式

CBLCOM_ERRC_MAX

2

最大レコード長

(最大レコード長の値が1〜1,073,741,799以外,または最小レコード長より小さい)

CBLCOM_ERRC_MIN

3

最小レコード長

(最小レコード長の値が1〜1,073,741,799以外)

CBLCOM_ERRC_PATH

4

ファイル名称アドレス

CBLCOM_ERRC_FLOPT

5

属性チェックオプション

CBLCOM_ERRC_OPEN

6

ファイルオープンモード

CBLCOM_ERRC_LOCK

7

ファイル施錠モード

CBLCOM_ERRC_FSYNC

8

ディスク書き込みオプション

CBLCOM_ERRC_DBGINF

9

デバッグ情報出力指示

CBLCOM_ERRC_ACCESS

10

ファイルアクセスモード

CBLCOM_ERRC_MSGBUFSIZ

11

メッセージ出力用バッファ長

3702

3802

パラメタインタフェース領域指定誤り

CBLCOM_ERRP_RDBUF

21

読み込みバッファアドレス

CBLCOM_ERRP_WRBUF

22

書き出しバッファアドレス

CBLCOM_ERRP_LOCK

23

WITH LOCK指定

CBLCOM_ERRP_KEY

24

レコード番号キー

CBLCOM_ERRP_ACCESS

25

レコード単位アクセスモード

CBLCOM_ERRP_KEYMODE

26

キー比較条件

3703

3803

ファイル属性エラー

CBLCOM_ERRF_CBL

41

ファイルフォーマット

(COBOL以外で作成したファイル,またはファイル破壊)

CBLCOM_ERRF_FORM

42

ファイル形式(ファイル編成,またはレコード形式)

CBLCOM_ERRF_MAX

43

最大レコード長

CBLCOM_ERRF_MIN

44

最小レコード長

インタフェース領域中の複数のデータ項目に誤りがある場合や,ファイルの属性チェックで複数の項目の属性が一致しなかった場合,COBOLエラー詳細情報には,最初に発見されたエラー項目に関する値が設定されます。

(2) パラメタインタフェース領域

パラメタインタフェース領域の形式を,次に示します。

表13‒6  パラメタインタフェース領域の形式

データ項目名

Windows(x86) COBOL2002の場合

Windows(x64) COBOL2002の場合

設定/参照する値

各サービスルーチンでの指定

区分

名称および意味

位置

長さ

データ形式

位置

長さ

データ形式

OP

CL

RE

WR

RW

DE

ST

UN

WD

入出力パラメタ

読み込みバッファ

アドレス

0

4

char *

0

8

char *

読み込んだレコードを格納する領域のアドレス

読み込み

サイズ

4

4

int

8

4

int

読み込んだレコードの長さを返す

未使用

12

4

char[4]

サービスルーチン予備領域

書き出しバッファアドレス

8

4

char *

16

char *

書き出すレコードのバッファアドレス

書き出しサイズ

12

4

int

24

4

int

書き出すレコードの長さ

※1

※1

相対レコード番号キー

(RELATIVE KEY

16

4

int

28

4

int

入出力対象レコードキー番号※2

ファイルアクセスモード:順アクセス

N

N

ファイルアクセスモード:乱アクセス

E

ファイルアクセスモード:動的アクセス

※3

WITH LOCK指定

20

1

char

32

1

char

CBLPARM_NOLOCK:レコード施錠要求なし(WITH NO LOCK)

CBLPARM_LOCK:レコード施錠要求あり(WITH LOCK)

レコード施錠の詳細は,マニュアル「COBOL2002 言語 標準仕様編」を参照

レコード単位アクセスモード

21

1

char

33

1

char

CBLPARM_ACCESS_NEXT:順アクセス(READ NEXT)

CBLPARM_ACCESS_KEY:乱アクセス(READ KEY)

※4

キー比較条件

22

1

char

34

1

char

位置づける相対レコード番号とキー(key)の比較条件

CBLPARM_KEY_EQUAL:キーの値と等しい(EQUAL)

CBLPARM_KEY_GREAT:キーの値より大きい(GREATER THAN)

CBLPARM_KEY_NOTLESS:キーの値より小さくない(NOT LESS THAN)

CBLPARM_KEY_GREATEQ:キーの値より大きいか,または等しい(GREATER THAN OR EQUAL)

未使用

23

9

char[9]

35

13

char[13]

サービスルーチン予備領域

※5

※5

※5

※5

※5

※5

※5

※5

※5

(凡例)

OP:CBLOPENサービスルーチン

CL:CBLCLOSEサービスルーチン

RE:CBLREADサービスルーチン

WR:CBLWRITEサービスルーチン

RW:CBLREWRITEサービスルーチン

DE:CBLDELETEサービスルーチン

ST:CBLSTARTサービスルーチン

UN:CBLUNLOCKサービスルーチン

WD:CBLWDISKサービスルーチン

○:必ず指定する項目

△:COBOL2002が値を返す項目

E:エラー(乱アクセス法の場合,CBLSTARTサービスルーチンは実行できない)

N:無視される項目(直前にCBLREADサービスルーチンの呼び出しが成功したレコードが対象となる)

−:無視される項目

注※1

固定長レコード形式の場合,このデータ項目の指定は無視されます。

注※2

入出力対象レコードキー番号について次に示します(○△だけ該当)。

  • 最初のレコード番号は1,以降2,3,…となり1ずつ増えます。

  • このデータ項目の指定は,相対ファイルだけで有効となります。順ファイルで指定した場合は,無視されます。

  • 順アクセスの場合,CBLREADサービスルーチンやCBLWRITEサービスルーチンによって読み書きされたレコードの,相対レコード番号が返されます。

  • 乱アクセス,または動的アクセスの場合,入出力文を実行する前に入出力対象レコードの相対レコード番号を設定する必要があります。

注※3

ファイルアクセスモードが動的アクセスのCBLREADサービスルーチンを実行したときは,レコード単位アクセスモードの指定によって,順アクセスか乱アクセスかが決まります。

注※4

順ファイルの場合,このデータ項目の指定は無視されます。

注※5

最初にCBLOPENサービスルーチンを実行する前にNULL(X'00')を指定して,領域をクリアしておく必要があります。

パラメタインタフェース領域のデータ項目に関する注意事項

(a)レコード単位アクセスモード

レコード単位アクセスモードには,相対ファイルに対するCBLREADサービスルーチンの実行が,順アクセスか,乱アクセスかを指定します。順ファイルに対してこの項目を指定した場合,指定は無視され,常に順アクセスとなります。

レコード単位アクセスモードに指定する値による動作の違いを,次に示します。

指定する値

レコード単位

アクセスモード

指定可能な

ファイルアクセスモード

(CBLOPENサービスルーチン実行時の指定)

動作

CBLPARM_ACCESS_NEXT

順アクセス

  • 順アクセス法

  • 動的アクセス法

次のどちらかのレコードを読み込む。

  • 直前のCBLREADサービスルーチンによって位置づけられたレコードの,次のレコード

  • 直前のCBLSTARTサービスルーチンによって位置づけられたレコード

ただし,CBLOPENサービスルーチンを実行した直後の場合は,有効な先頭レコードを読み込む。

CBLPARM_ACCESS_KEY

乱アクセス

  • 乱アクセス法

  • 動的アクセス法

相対レコード番号キーに指定した番号のレコードを読み込む。

レコードのアクセスモードが順アクセスの場合,直前のCBLREADサービスルーチン,またはCBLSTARTサービスルーチンがエラー(パラメタエラーを含む)になると,それに続くCBLREADサービスルーチンもエラーになります。

(b)キー比較条件

キー比較条件には,相対ファイルに対するCBLSTARTサービスルーチンで,位置づける相対レコード番号とキーの比較条件を指定します。キー比較条件の指定値と意味を,次に示します。

指定する値

比較条件

対応するCOBOL START文のKEY指定

位置づけるレコード(以下の条件を満たさない時はエラー)

CBLPARM_KEY_EQUAL

キーの値と等しい

KEY IS EQUAL TO

(KEY IS = TO)

相対レコード番号がキーと等しいレコード

CBLPARM_KEY_GREAT

キーの値より大きい

KEY IS GREATER THAN

(KEY IS > )

相対レコード番号がキーの値より大きい最初のレコード

CBLPARM_KEY_NOTLESS

キーの値より小さくない

KEY IS NOT LESS THAN

(KEY IS NOT < )

相対レコード番号がキーの値より小さくない最初のレコード

CBLPARM_KEY_GREATEQ

キーの値より大きいか,または等しい

KEY IS GREATER THAN

OR EQUAL TO

(KEY IS >= )

相対レコード番号がキーの値より大きいか,または等しい最初のレコード