COBOL2002 ユーザーズガイド

[目次][用語][索引][前へ][次へ]

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

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

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

インタフェース領域の名称
(構造体のtypedef名称)
サイズ(バイト) 用途
32bit版PC(x86) COBOL2002の場合 64bit版PC(x64) COBOL2002の場合
管理情報インタフェース領域
(CBLCOMFL)
256 312
  • ファイル情報を管理する
  • OPEN時のファイル情報を指定する
  • エラー発生時,エラー情報を指定する
  • COBOL2002の内部情報として使用される
パラメタインタフェース領域
(CBLPARMFL)
32 48
  • 入出力パラメタを指定する
<この項の構成>
(1) 管理情報インタフェース領域
(2) パラメタインタフェース領域

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

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

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

データ項目名 32bit版PC(x86) COBOL2002の場合 64bit版PC(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)

データ項目名 32bit版PC(x86) COBOL2002の場合 64bit版PC(x64) COBOL2002の場合 設定/参照する値 備考
区分 名称 位置 長さ データ形式 位置 長さ データ形式
エラー情報 入出力状態
(FILE STATUS)
28 2 short 40 2 short 0〜99 正常/エラーに関係なく,必ず値が返される。
返される値の詳細は「付録G 入出力状態の値」を参照
システムエラー情報有無 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 パラメタインタフェース領域の形式

データ項目名 32bit版PC(x86) COBOL2002の場合 64bit版PC(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 >= )
相対レコード番号がキーの値より大きいか,または等しい最初のレコード