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

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

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

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

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

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

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

データ項目名UNIX32の場合UNIX64の場合設定/参照する値CBLOPENサービスルーチンでの指定
区分名称位置長さデータ形式位置長さデータ形式OUTPUT指定OUTPUT以外
属性チェック無属性チェック有
ファイル情報ファイル編成とレコード形式104char[4]04char[4]
SAMF:順ファイル固定長レコード形式
SAMV:順ファイル可変長レコード形式
RELF:相対ファイル固定長レコード形式
RELV:相対ファイル可変長レコード形式
最大レコード長44int44intレコード長
(固定長形式の場合レコード長)
最小レコード長84int84intレコード長
(固定長形式の場合は無視される)
未使用124char[4]サービスルーチン予備領域NULL(X'00')を指定してクリアしておくことNULL(X'00')を指定してクリアしておくことNULL(X'00')を指定してクリアしておくこと
ファイル名称アドレス124char*168char*オープンするファイル名称のアドレスファイル名称はNULLで終わる文字列とする。
CBLOPENサービスルーチンを呼び出す時だけ指定が必要。
CBLOPENサービスルーチンの呼び出しが成功したあと,CBLCLOSEサービスルーチン実行までの入出力文で,COBOL2002は,このアドレス,およびアドレスが指す領域を参照しない。
属性チェックオプション2161char241char
CBLCOM_NOCHK:
管理情報インタフェース領域とファイル実体の属性をチェックしない。
CBLCOM_CHK:
管理情報インタフェース領域とファイル実体の属性をチェックする。

CBLCOM_NOCHK

CBLCOM_CHK
ファイルOPEN文のモード171char251char
CBLCOM_OPEN_INPUT:
読み取り専用(OPEN INPUT)
CBLCOM_OPEN_IO:
読み取りと書き込み(OPEN I-O)
CBLCOM_OPEN_OUTPUT:
書き込み専用・新規作成(OPEN OUTPUT)
CBLCOM_OPEN_EXTEND:
追加書き(OPEN EXTEND)

CBLCOM_OPEN_OUTPUT
ファイル施錠モード181char261char
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
ディスク書き込みオプション191char271char
CBLCOM_ENVFSYNC:
環境変数CBLFSYNCに従う。
CBLCOM_NOFSYNC:
ディスク書き込み保証を適用しない。
CBLCOM_FSYNC:
クローズ時のディスク書き込み保証を適用する。
CBLCOM_WDISK:
書き込み時のディスク書き込み保証を適用する。
詳細は「13.6 COBOL入出力サービスルーチンでのディスク書き込み保証」を参照。

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

(読み取り専用では無視)
ファイルアクセスモード201char281char
CBLCOM_ACCESS_SEQ:
順アクセス法(ACCESS MODE IS SEQUENTIAL)
CBLCOM_ACCESS_RAND:
乱アクセス法(ACCESS MODE IS RANDOM)
CBLCOM_ACCESS_DYNA:
動的アクセス法(ACCESS MODE IS DYNAMIC)
順ファイルでは順アクセス法だけが指定できる。
未使用217char[7]2911char[11]サービスルーチン予備領域
NULL(X'00')を指定してクリアしておくこと

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

NULL(X'00')を指定してクリアしておくこと
(凡例)
○:必ず指定する項目
△:COBOL2002が値を返す項目
-:無視される項目

表中の「CBLCOM_xxx」は,COBOL2002で使用できるインクルードファイル(CBL85fl.h)中で定義されているマクロです。CBL85fl.hファイルは,次のディレクトリの下に提供されています。
UNIX32,Linux(IPF64)の場合

/opt/HILNGcbl2k/include/cbl

HP-UX(IPF64),AIX(64),Linux(x64)の場合

/opt/HILNGcbl2k64/include/cbl

注※1
順固定長ファイルに対して入出力する場合は,必ず「SAMF」を指定してください。
注※2
順固定長ファイルではこの指定は無視され,レコード長に従います。
注※3
順ファイルでは手動施錠を指定できません。

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

データ項目名UNIX32の場合UNIX64の場合設定/参照する値備考
区分名称位置長さデータ形式位置長さデータ形式
エラー情報入出力状態
(FILE STATUS)
282short402short0~99正常/エラーに関係なく,必ず値が返される。
返される値の詳細は「付録F 入出力状態の値」を参照
システムエラー情報有無301char421char
CBLCOM_ERR_NOSYSTEM:
システムエラー情報なし
CBLCOM_ERR_SYSTEM:
システムエラー情報有り
 
未使用311char431charサービスルーチン予備領域 
COBOLメッセージ番号322short442short3001~4099
COBOLエラーメッセージ番号
13.5.1 COBOL入出力サービスルーチンで出力されるエラーメッセージ番号」を参照
システムコール番号342short462short1~999
エラーとなったシステムコールを表すCOBOL2002が定める関数番号
システムエラー情報有りの場合に有効。
番号と内容についてはオンラインマニュアル「COBOL2002 メッセージ」を参照
システムエラーコード364int484intシステムが返すエラーコードシステムエラー情報有りの場合に有効。
システムのマニュアルを参照
COBOLエラー詳細情報401char521charインタフェース領域指定誤り,およびファイル属性エラー発生時の詳細情報COBOLメッセージ番号が3701~3703,および3801~3803の場合に有効。
設定される値は,「表13-5 COBOLエラー詳細情報の一覧」を参照
未使用4115char[15]5315char[15]サービスルーチン予備領域 
デバッグ情報デバッグ情報出力指示561char681char
CBLCOM_DBG_NO:
デバッグ情報を出力しない
CBLCOM_DBG_BEF:
各入出力サービスルーチン実行の前にデバッグ情報を出力する
CBLCOM_DBG_AFT:
各入出力サービスルーチン実行後にデバッグ情報を出力する
CBLCOM_DBG_BEFAFT:
各入出力サービスルーチン実行の前とあとでデバッグ情報を出力する
13.5.2 インタフェース領域のダンプ出力」を参照
未使用5711char[11]6911char[11]サービスルーチン予備領域 
ユーザ領域6816char[16]8016char[16]プログラムで使用可能な領域。
COBOL2002では管理しない
 
システムで使用する領域84172char[132]
char *[10]
96216char[136]
char *[10]
システムで使用する領域。
最初のオープンを実行する前にNULL(X'00')を指定してクリアしておく
NULL(X'00')クリア以降,この領域を更新してはならない
表中の「CBLCOM_xxx」は,COBOL2002で使用できるインクルードファイル(CBL85fl.h)中で定義されているマクロです。CBL85fl.hファイルは,次のディレクトリの下に提供されています。
UNIX32,Linux(IPF64)の場合

/opt/HILNGcbl2k/include/cbl

HP-UX(IPF64),Linux(x64)の場合

/opt/HILNGcbl2k64/include/cbl

管理情報インタフェース領域のデータ項目に関する注意事項
(a)属性チェックオプション
属性チェックオプションには,ファイルのオープン時に管理情報インタフェース領域の値とファイル実体の属性をチェックするかどうかを指定します。
(i)属性をチェックしない場合
属性チェックオプションにCBLCOM_NOCHKを指定すると,ファイルの属性がチェックされません。この場合,CBLOPENサービスルーチンの呼び出し成功時に,ファイル実体に基づいて次のデータ項目が自動的に設定されます。
  • ファイル形式
    順ファイル可変長レコード形式の場合 :SAMV
    相対ファイル固定長レコード形式の場合:RELF
    相対ファイル可変長レコード形式の場合:RELV
  • 最大レコード長
  • 最小レコード長
  • 入出力状態
    00が返されます。
ユーザは,設定されたデータ項目の値から,入出力に必要なバッファ領域を用意するようなプログラムを作成する必要があります。また,ファイル形式が妥当かどうかをユーザプログラム側で必ず判定するようにしてください。
(ii)属性をチェックする場合
属性チェックオプションにCBLCOM_CHKを指定すると,次のデータ項目についてファイルの属性がチェックされます。
  • ファイル編成とレコード形式
  • 最大レコード長
  • 最小レコード長
また,CBLOPENサービスルーチンの呼び出し成功時に,入出力状態に00が返されます。
属性チェックの結果,管理情報インタフェース領域の設定とファイル実体の属性が一致しなかった場合,サービスルーチンはエラーの戻り値を返し,ファイルは開かれません。
注意事項
  • OPEN文のモードに「書き込み専用・新規作成(OPEN_OUTPUT)」を指定した場合,属性チェックオプションの指定は無視され,管理情報インタフェース領域に指定されたファイル編成,およびレコード長に従って新規にファイルが作成されます。
  • ファイル編成とレコード形式にSAMF(順ファイル固定長レコード形式)を指定した場合,属性チェックオプションの指定は無視され,指定したレコード長に従ってファイルの入出力処理が実行されます。
  • ファイル編成とレコード形式に順ファイル固定長レコード形式(SAMF)を指定しないで,かつ,属性チェックオプションにチェックしない(CBLCOM_NOCHK)を指定した場合,順固定長ファイルに対してCBLOPENサービスルーチンを実行すると,対象外ファイルとみなされます。
(b)エラー情報
エラー情報に設定される値は,サービスルーチンの終了状態によって次のように異なります。
サービスルーチンの終了状態入出力状態COBOLメッセージ番号システムエラー情報有無システムコール番号/システムエラーコード
正常終了000なし
(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_FORM1ファイル編成とレコード形式
CBLCOM_ERRC_MAX2最大レコード長
(最大レコード長の値が1~1,073,741,799以外,または最小レコード長より小さい)
CBLCOM_ERRC_MIN3最小レコード長
(最小レコード長の値が1~1,073,741,799以外)
CBLCOM_ERRC_PATH4ファイル名称アドレス
CBLCOM_ERRC_FLOPT5属性チェックオプション
CBLCOM_ERRC_OPEN6ファイルオープンモード
CBLCOM_ERRC_LOCK7ファイル施錠モード
CBLCOM_ERRC_FSYNC8ディスク書き込みオプション
CBLCOM_ERRC_DBGINF9デバッグ情報出力指示
CBLCOM_ERRC_ACCESS10ファイルアクセスモード
CBLCOM_ERRC_MSGBUFSIZ11メッセージ出力用バッファ長
3702
3802
パラメタインタフェース領域指定誤りCBLCOM_ERRP_RDBUF21読み込みバッファアドレス
CBLCOM_ERRP_WRBUF22書き出しバッファアドレス
CBLCOM_ERRP_LOCK23WITH LOCK指定
CBLCOM_ERRP_KEY24レコード番号キー
CBLCOM_ERRP_ACCESS25レコード単位アクセスモード
CBLCOM_ERRP_KEYMODE26キー比較条件
3703
3803
ファイル属性エラーCBLCOM_ERRF_CBL41ファイルフォーマット
(COBOL以外で作成したファイル,またはファイル破壊)
CBLCOM_ERRF_FORM42ファイル形式(ファイル編成,またはレコード形式)
CBLCOM_ERRF_MAX43最大レコード長
CBLCOM_ERRF_MIN44最小レコード長
インタフェース領域中の複数のデータ項目に誤りがある場合や,ファイルの属性チェックで複数の項目の属性が一致しなかった場合,COBOLエラー詳細情報には,最初に発見されたエラー項目に関する値が設定されます。

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

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

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

データ項目名UNIX32の場合UNIX64の場合設定/参照する値
  
各サービスルーチンでの指定
区分名称および意味位置長さデータ形式位置長さデータ形式OPCLREWRRWDESTUNWD
入出力パラメタ読み込みバッファ
アドレス
04char *08char *読み込んだレコードを格納する領域のアドレス
読み込み
サイズ
44int84int読み込んだレコードの長さを返す
未使用124char[4]サービスルーチン予備領域
書き出しバッファアドレス84char *16 char *書き出すレコードのバッファアドレス
書き出しサイズ124int244int書き出すレコードの長さ※1※1
相対レコード番号キー
(RELATIVE KEY
164int284int入出力対象レコードキー番号※2ファイルアクセスモード:順アクセスNN
ファイルアクセスモード:乱アクセスE
ファイルアクセスモード:動的アクセス※3
WITH LOCK指定201char321charCBLPARM_NOLOCK:レコード施錠要求なし(WITH NO LOCK)
CBLPARM_LOCK:レコード施錠要求あり(WITH LOCK)
レコード施錠の詳細は,マニュアル「COBOL2002 言語 標準仕様編」を参照
レコード単位アクセスモード211char331charCBLPARM_ACCESS_NEXT:順アクセス(READ NEXT)
CBLPARM_ACCESS_KEY:乱アクセス(READ KEY)
※4
キー比較条件221char341char位置づける相対レコード番号とキー(key)の比較条件
CBLPARM_KEY_EQUAL:キーの値と等しい(EQUAL)
CBLPARM_KEY_GREAT:キーの値より大きい(GREATER THAN)
CBLPARM_KEY_NOTLESS:キーの値より小さくない(NOT LESS THAN)
CBLPARM_KEY_GREATEQ:キーの値より大きいか,または等しい(GREATER THAN OR EQUAL)
未使用239char[9]3513char[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 >= )
相対レコード番号がキーの値より大きいか,または等しい最初のレコード