DCBハンドリングAPI

本付録では、DCBハンドリングAPIを使用して、JCLで割り当てられたDDの属性情報を検索したり、一部の属性を変更したりする方法について説明します。

1. 概要

OpenFrameが提供するDCB(Data Control Block)Handling APIを使用すると、JCLで割り当てられたDD(データ定義)の属性情報を検索したり、一部の属性を変更したりすることができます。また、アプリケーション・プログラムで動的割り当てを実行することも可能です。

DCB処理APIを使用してプログラムを作成するには、OpenFrameバイナリと一緒に配布されるtdcb.hヘッダー・ファイルをユーザー・プログラムに含める必要があり、ユーザー・プログラムをコンパイルする際、libtdcb.soライブラリをリンクする必要があります。

DCBハンドリングAPIは、以下のように分類できます。

  • 割り当てハンドル

    API 説明

    tdcb_get_handle()

    JCLのDD文で割り当てられたDCB情報をDD名で検索します。

    tdcb_discard_handle()

    tdcb_get_handle() APIを実行して検索された割り当て情報を解放します。

    tdcb_print_info()

    tdcb_get_handle() APIを実行して検索された割り当て情報を出力します。

  • DCB情報

    API 説明

    tdcb_get_type()

    DCBタイプと順次連結(Concatenation)の数を取得します。

    tdcb_maxlrecl()

    論理レコードの最大長と平均長さを取得します。

    tdcb_nvsm_info()

    非VSAMデータセットのDSORG属性とRECFM属性を取得します。

  • 属性の取得

    API 説明

    tdcb_get_dsname()

    データセット名とメンバー名を取得します。

    tdcb_get_volser()

    データセットのボリューム・シリアル情報を取得します。

    tdcb_get_flags()

    データセットのその他の属性を取得します。

    tdcb_get_blksize()

    データセットのブロック・サイズとレコード長を取得します。

    tdcb_get_key_info()

    データセットのキーの位置とキー長の情報を取得します。

    tdcb_get_vsamtype()

    VSAMデータセットの種類とAIX属性を取得します。

  • 属性の設定

    API 説明

    tdcb_set_lrecl()

    データセットの論理レコード長を指定します。

    tdcb_set_recfm()

    データセットのRECFM属性を指定します。

    tdcb_set_blksize()

    データセットのブロック・サイズを指定します。

    tdcb_set_keylen()

    データセットのキー長とキーの位置情報を指定します。

  • 動的割り当て

    API 説明

    tdcb_allocate()

    データセットに対して動的割り当てを実行します。

    tdcb_concatenate()

    動的割り当てを実行したDDにデータセットの連結を行います。

    tdcb_unallocate()

    動的割り当てを実行したDDの割り当てを解除します。

2. 割り当てハンドル

2.1. tdcb_get_handle()

JCLのDD文で割り当てられたDCB情報をDD名で検索します。 tdcb_get_handle() APIを実行すると、JCLによって共有メモリに構成されたDCB情報の一部をローカル・メモリ領域に再構成し、その後の割り当て情報へのアクセスを容易にします。

正常に割り当て情報を検索した場合は、負数以外の割り当てハンドルを返します。返された割り当てハンドルは、以降のDCB情報検索関数や属性を変更する関数などで使用されます。

  • プロトタイプ

    int tdcb_get_handle(char *ddname);
  • パラメータ

    パラメータ 説明

    ddname(入力)

    取得する割り当て情報のDD名です。

  • 戻り値

    正常に割り当て情報を検索した場合は、負数以外の割り当てハンドルを返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

2.2. tdcb_discard_handle()

tdcb_get_handle() APIを実行して検索された割り当て情報を解放します。つまり、ローカル・メモリ領域に構成されたDCB情報が解放されます。したがって、同じDDのDCB情報を再使用するには、tdcb_get_handle() APIを再び呼び出す必要があります。

tdcb_get_handle() APIを呼び出して取得した割り当て情報を、tdcb_discard_handle() APIを使用して必ず解放する必要はありませんが、同じDDに対してtdcb_get_handle() APIを繰り返し呼び出すと、そのDD情報がすでにローカル・メモリ領域に構成されているという警告メッセージが発生します。

Cモジュールでtdcb_discard_handle() APIを使用して割り当て情報を解放していないDDに対し、COBOLモジュールでOPEN文が実行されても、内部的にはtdcb_get_handle() APIと類似したAPIが呼び出されるため、同じ警告メッセージが発生します。

  • プロトタイプ

    int tdcb_discard_handle(int handle);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

2.3. tdcb_print_info()

tdcb_get_handle() APIを実行して検索された割り当て情報を出力します。

以下は、出力される割り当て情報に含まれる内容です。

DD名, ジョブ名, 割り当て情報, 割り当て日, 割り当て時間, 順次連結数
+ [順番] スロット番号, DCBタイプ, DCB名, DISPOSITION
  • プロトタイプ

    int tdcb_print_info(int handle);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

3. DCB情報

3.1. tdcb_get_type()

tdcb_get_handle() APIを実行して検索された割り当て情報からDCBのタイプと順次連結数を取得します。

DCBタイプのtdcb.hヘッダー・ファイルには、以下のようなマクロが定義されています。

#define TDCB_DCB_TYPE_NONE              0x00    /* Unknown */
#define TDCB_DCB_TYPE_NVSM              0x01    /* Non-VSAM */
#define TDCB_DCB_TYPE_TSAM              0x02    /* VSAM */
#define TDCB_DCB_TYPE_ISAM              0x03    /* ISAM */

OpenFrameシステムでは、2つ以上の非VSAMデータセットを連結して、1つのデータセットであるかのように連続して検索できる方法を提供しています。これを順次連結(Sequential Concatenation)といいます。順次連結の数は、連結するデータセットの数を意味します。

OpenFrameシステムでは、VSAMデータセットの順次連結はサポートしていません。DCBタイプがTSAMである場合、countパラメータには順次連結の数ではなく、ベース・クラスターとそれに連結されている代替索引の総数が含まれます。

  • プロトタイプ

    int tdcb_get_type(int handle, int *dcb_type, int *count);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

    dcb_type(出力)

    与えられた割り当て情報のDCBタイプを保存するバッファーです。

    count(出力)

    順次連結の数、またはベース・クラスターと代替索引の総数を保存するバッファーです。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

3.2. tdcb_maxlrecl()

tdcb_get_handle() APIを実行して検索された割り当て情報から、論理レコードの最大長と平均長さを取得します。

順次連結されていない非VSAMデータセットや固定長VSAMデータセットの場合、最大レコード長と平均レコード長が同じです。一方、順次連結されている非VSAMデータセットや可変長VSAMデータセットの場合は、最大レコード長と平均レコード長が異なる場合があります。

可変長非VSAMデータセットのレコード長は、JCLでデータセットを割り当てるときに指定されたLRECL値が渡されます。つまり、RDWを含む論理レコード長が取得されます。

  • プロトタイプ

    int tdcb_maxlrecl(int handle, int *maxlrecl, int *avglrecl);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

    maxlrecl(出力)

    与えられた割り当て情報の論理レコードの最大長を保存するバッファーです。

    avglrecl(出力)

    与えられた割り当て情報の論理レコードの平均長さを保存するバッファーです。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

3.3. tdcb_nvsm_info()

tdcb_get_handle() APIを実行して検索された割り当て情報から、非VSAMデータセットのDSORG属性とRECFM属性を取得します。

非VSAMデータセットのDSORG属性は、データセットの構造を指定します。以下のようなデータセット構造が表現できます。

DSORG 説明

PS(Physical Sequential)

SAMデータセットです。

IS(Indexed Sequential)

ISAMデータセットです。

PO(Partitioned)

PDSまたはPDSEです。

DA(Direct)

DAMデータセットです。

非VSAMデータセットのRECFM属性は、レコードの特徴を指定します。RECFM属性を指定する文字は、それぞれ以下のような意味を持ちます。

RECFM 説明

F

固定長レコードです。

V

可変長レコードです。

L

行順次レコードです。

U

不定長レコード形式です。

B

ブロック単位のI/Oをサポートします。

A

ANSI制御文字を含みます。

固定長レコードに対してブロック単位のI/OをサポートするデータセットのRECFM属性は「RECFM=FB」形式で指定します。また、可変長レコードにANSI制御文字が含まれているデータセットのRECFM属性は、「RECFM=VA」形式で指定します。

順次連結されている非VSAMデータセットの場合、最初のデータセットのDSORG属性とRECFM属性が返されます。(原則として、メインフレームでは基本属性が異なる非VSAMデータセットの順次連結は禁じられています。)

VSAMデータセットが固定長か可変長かによって、DSORG=PS、RECFM=FBまたはDSORG=PS、RECFM=VBの値が返されます。

割り当て情報からDSORG属性を取得するには、最小8バイト以上の文字列バッファー・ポインターをdsorgパラメータに指定する必要があります。また、RECFM属性を取得するには、最小8バイト以上の文字列バッファー・ポインターをrecfmパラメータに指定する必要があります。ユーザー文字列バッファーが指定された場合は、DSORG属性とRECFM属性がNULL終了文字と一緒にユーザー・バッファーにコピーされます。

  • プロトタイプ

    int tdcb_nvsm_info(int handle, char *dsorg, char *recfm);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

    dsorg(出力)

    与えられた割り当て情報のDSORG属性を保存するバッファーです。

    recfm(出力)

    与えられた割り当て情報のRECFM属性を保存するバッファーです。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

4. 属性の取得

4.1. tdcb_get_dsname()

tdcb_get_handle() APIを実行して検索された割り当て情報から、特定のDCBコンポーネントのデータセット名とメンバー名を取得します。

DCBコンポーネントとは、順次連結されている非VSAM割り当て情報における特定の1つのデータセットか、あるいはVSAM割り当て情報におけるベース・クラスターまたは代替索引のいずれかを意味します。

割り当てられたデータセット名を取得するには、最小45バイト以上の文字列バッファー・ポインターを、dsnameパラメータに指定する必要があります。(NULL終了文字と一緒にユーザー・バッファーにコピーされます。)

割り当てられたデータセットがPDSまたはPDSEデータセットのメンバーである場合は、メンバー名を取得することができます。最小9バイト以上の文字列バッファー・ポインターをmemberパラメータに指定する必要があります。(NULL終了文字と一緒にユーザー・バッファーにコピーされます。)

  • プロトタイプ

    int tdcb_get_dsname(int handle, int index, char *dsname, char *member);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

    index(入力)

    順次連結の順番、あるいはベース・クラスターまたは代替索引の指定番号です。

    dsname(出力)

    DCBコンポーネントのデータセット名を保存するバッファーです。

    member(出力)

    DCBコンポーネントのメンバー名を保存するバッファーです。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

4.2. tdcb_get_volser()

tdcb_get_handle() APIを実行して検索された割り当て情報から、特定のDCBコンポーネントのボリューム・シリアル情報を取得します。 )))DCBコンポーネントとは、順次連結されている非VSAM割り当て情報における特定の1つのデータセットか、あるいはVSAM割り当て情報におけるベース・クラスターまたは代替索引のいずれかを意味します。

割り当てられたDCBコンポーネントのボリューム・シリアル情報を取得するには、最小9バイト以上の文字列バッファー・ポインターをvolserパラメータに指定する必要があります。(NULL終了文字と一緒にユーザー・バッファーにコピーされます。)

  • プロトタイプ

    int tdcb_get_volser(int handle, int index, char *volser);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

    index(入力)

    順次連結の順番、あるいはベース・クラスターまたは代替索引の指定番号です。

    volser(出力)

    DCBコンポーネントのボリューム・シリアル情報を保存するバッファーです。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

4.3. tdcb_get_flags()

tdcb_get_handle() APIを実行して検索された割り当て情報から、特定のDCBコンポーネントのその他の属性を取得します。

DCBコンポーネントとは、順次連結されている非VSAM割り当て情報における特定の1つのデータセットか、あるいはVSAM割り当て情報におけるベース・クラスターまたは代替索引のいずれかを意味します。

DCBコンポーネントのその他の属性とは、tdcb.hヘッダー・ファイルに定義されている以下のようなマクロを意味します。

#define TDCB_LRECL_NOT_SET              0x01
#define TDCB_RECFM_NOT_SET              0x04
#define TDCB_BLKSIZE_NOT_SET            0x08
#define TDCB_KEYLEN_NOT_SET             0x40
#define TDCB_IS_TAPE_DATASET            0x10
#define TDCB_IS_OPEN_INDICATOR          0x20

以下は、それぞれのマクロについての説明です。

マクロ 説明

TDCB_LRECL_NOT_SET

カタログやJCLでデータセットの論理レコード長が指定されていない場合です。

TDCB_RECFM_NOT_SET

カタログやJCLでデータセットのRECFM属性が指定されていない場合です。

TDCB_BLKSIZE_NOT_SET

カタログやJCLでデータセットのブロック・サイズが指定されていない場合です。

TDCB_KEYLEN_NOT_SET

カタログやJCLでデータセットのキー長が指定されていない場合です。

TDCB_IS_TAPE_DATASET

テープ・ボリューム・デバイスに割り当てられたデータセットです。

TDCB_IS_OPEN_INDICATOR

アプリケーションからまだOPEN APIが呼び出されていない場合です。

  • プロトタイプ

    tdcb_get_flags(int handle, int index, int *flags);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

    index(入力)

    順次連結の順番、あるいはベース・クラスターまたは代替索引の指定番号です。

    flags(出力)

    DCBコンポーネントのその他の属性情報を保存するバッファーです。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

4.4. tdcb_get_blksize()

tdcb_get_handle() APIを実行して検索された割り当て情報から、特定のDCBコンポーネントのブロック・サイズとレコード長を取得します。

DCBコンポーネントとは、順次連結されている非VSAM割り当て情報における特定の1つのデータセットか、あるいはVSAM割り当て情報におけるベース・クラスターまたは代替索引のいずれかを意味します。

可変長非VSAMデータセットのレコード長は、JCLで該当するデータセットを割り当てるときに指定されたLRECL値が渡されます。つまり、RDWを含む論理レコード長が取得されます。

割り当てられたDCBコンポーネントのレコード長の情報が不要な場合は、reclenパラメータにNULLを指定します。

  • プロトタイプ

    int tdcb_get_blksize(int handle, int index, int *blksize, int *reclen);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

    index(入力)

    順次連結の順番、あるいはベース・クラスターまたは代替索引の指定番号です。

    blksize(出力)

    DCBコンポーネントのブロック・サイズを保存するバッファーです。

    reclen(出力)

    DCBコンポーネントのレコード長を保存するバッファーです。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

4.5. tdcb_get_key_info()

tdcb_get_handle() APIを実行して検索された割り当て情報から、特定のDCBコンポーネントのキーの位置とキー長の情報を取得します。

DCBコンポーネントとは、順次連結されている非VSAM割り当て情報における特定の1つのデータセットか、あるいはVSAM割り当て情報におけるベース・クラスターまたは代替索引のいずれかを意味します。

割り当てられたDCBコンポーネントのキーの情報がない場合(割り当てられたデータセットが非VSAMデータセットであり、DSORGがPSかPOである場合)、キーの位置とキーの長さ情報がすべて0で返されます。

  • プロトタイプ

    int tdcb_get_key_info(int handle, int index, int *keypos, int *keylen);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

    index(入力)

    順次連結の順番、あるいはベース・クラスターまたは代替索引の指定番号です。

    keypos(出力)

    DCBコンポーネントのキーの位置を保存するバッファーです。

    keylen(出力)

    DCBコンポーネントのキー長を保存するバッファーです。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

4.6. tdcb_get_vsamtype()

tdcb_get_handle() APIを実行して検索された割り当て情報から、VSAM DCBンポーネントのVSAMデータセットの種類とAIX属性を取得します。

DCBコンポーネントとは、順次連結されている非VSAM割り当て情報における特定の1つのデータセットか、あるいはVSAM割り当て情報におけるベース・クラスターまたは代替索引のいずれかを意味します。

VSAMデータセットには、以下のようなマクロがtdcb.hヘッダー・ファイルに定義されています。

#define TDCB_VSAM_TYPE_ESDS             0x01    /* ESDS */
#define TDCB_VSAM_TYPE_KSDS             0x02    /* KSDS */
#define TDCB_VSAM_TYPE_RRDS             0x04    /* RRDS */
#define TDCB_VSAM_TYPE_VRDS             0x05    /* VRDS */

AIX属性とは、tdcb.hヘッダー・ファイルに定義されている以下のようなマクロです。

#define TDCB_RGATTR_EAIX                0x01
#define TDCB_RGATTR_KAIX                0x02
#define TDCB_RGATTR_UPGRADE             0x04

以下は、各マクロの説明です。

マクロ 説明

TDCB_RGATTR_EAIX

VSAM DCBコンポーネントはESDSの代替索引です。

TDCB_RGATTR_KAIX

VSAM DCBコンポーネントはKSDSの代替索引です。

TDCB_RGATTR_UPGRADE

代替索引コンポーネントは、UPGRADE属性を持ちます。

  • プロトタイプ

    int tdcb_get_vsamtype(int handle, int index, int *vsamtype, int *rgattr);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

    index(入力)

    順次連結の順番、あるいはベース・クラスターまたは代替索引の指定番号です。

    vsamtype(出力)

    VSAM DCBコンポーネントのVSAMデータセットの種類を保存するバッファーです。

    rgattr(出力)

    VSAM DCBコンポーネントのAIX属性を保存するバッファーです。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

5. 属性の設定

5.1. tdcb_set_lrecl()

tdcb_get_handle() APIを実行して検索された割り当て情報で、特定のDCBコンポーネントの論理レコード長を指定します。 )))DCBコンポーネントとは、順次連結されている非VSAM割り当て情報における特定の1つのデータセットを意味します。

tdcb_set_lrecl() APIを使用して論理レコード長を指定する前に、tdcb_get_flags() APIを使用して、該当するDCBコンポーネントの論理レコード長がカタログやJCLで指定されていないことを確認してください。

可変長非VSAMデータセットのレコード長は、JCLでデータセットを割り当てるときと同様に、RDWを含む論理レコード長を指定します。

  • プロトタイプ

    int tdcb_set_lrecl(int handle, int index, int lrecl);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

    index(入力)

    順次連結されている非VSAMデータセットの順番または0です。

    lrecl(入力)

    DCBコンポーネントに指定する論理レコード長です。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

5.2. tdcb_set_recfm()

tdcb_get_handle() APIを実行して検索された割り当て情報で、特定のDCBコンポーネントのRECFM属性を指定します。 )))DCBコンポーネントとは、順次連結されている非VSAM割り当て情報における特定の1つのデータセットを意味します。

tdcb_set_recfm() APIを使用してRECFM属性を指定する前に、tdcb_get_flags() APIを使用して、該当するDCBコンポーネントのRECFM属性がカタログやJCLで指定されていないことを確認してください。

  • プロトタイプ

    int tdcb_set_recfm(int handle, int index, char *recfm);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

    index(入力)

    順次連結されている非VSAMデータセットの順番または0です。

    recfm(入力)

    DCBコンポーネントに指定するRECFM属性です。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

5.3. tdcb_set_blksize()

tdcb_get_handle() APIを実行して検索された割り当て情報で、特定のDCBコンポーネントのブロック・サイズを指定します。 )))DCBコンポーネントとは、順次連結されている非VSAM割り当て情報における特定の1つのデータセットを意味します。

tdcb_set_blksize() APIを使用してブロック・サイズを指定する前に、tdcb_get_flags() APIを使用して、該当するDCBコンポーネントのブロック・サイズがカタログやJCLで指定されていないことを確認してください。

  • プロトタイプ

    int tdcb_set_blksize(int handle, int index, int blksize);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

    index(入力)

    順次連結されている非VSAMデータセットの順番または0です。

    blksize(入力)

    DCBコンポーネントに指定するブロック・サイズです。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

5.4. tdcb_set_keylen()

tdcb_get_handle() APIを実行して検索された割り当て情報で、特定のDCBコンポーネントのキー長とキーの位置情報を指定します。 )))DCBコンポーネントとは、順次連結されている非VSAM割り当て情報における特定の1つのデータセットを意味します。

tdcb_set_keylen() APIでキー長とキーの位置情報を指定する前に、tdcb_get_flags() APIを使用して、該当するDCBコンポーネントのキー長がカタログやJCLで指定されていないことを確認してください。

  • プロトタイプ

    int tdcb_set_keylen(int handle, int index, int keylen, int keyoff);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_get_handle() APIを実行して取得した割り当てハンドルです。

    index(入力)

    順次連結されている非VSAMデータセットの順番または0です。

    keylen(入力)

    DCBコンポーネントに指定するキーの長さです。

    keyoff(入力)

    DCBコンポーネントに指定するキーの位置です。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーコード、エラーメッセージと一緒に-1を返します。

6. 動的割り当て

6.1. tdcb_allocate()

JCLに技術していないデータセットに対し、アプリケーション・プログラムで割り当てを実行してデータセットにアクセスする場合に使用します。

tdcb_allocateを使用して動的割り当てを実行した後、データセットのオープン、およびその他のI/Oを実行することができます。

  • プロトタイプ

    int tdcb_allocate(char *ddname, char *ddparam, int flags);
  • パラメータ

    パラメータ 説明

    ddname(入力)

    DD名を指定します。

    ddparam(入力)

    DD属性を文字列で指定します。

    各属性はコンマ(,)で区切ります。

    • DSNAME : データセット名を記述します。(例: DSNAME=ABC)

    • DISP : 使用可能ステータス、正常終了DISP、異常終了DISPを指定します。(例: DISP=(NEW、CATLG))

    • DATACLAS : データセットのDATACLASを指定します。(例: DATACLAS=ACLS)

    • MGMTCLAS : データセットのMGMTCLASを指定します。

    • STORCLAS : データセットのSTORCLASを指定します。

    • VOL=SER : ボリューム・シリアル情報を指定します。(例: VOL=SER=DEFVOL)

    • SPACE : SPACE属性を指定します。(例: SPACE=(CYL,(1,1),RLSE))

    • DSORG : DSORG属性を指定します。(例: DSORG=PS)

    • RECFM : RECFM属性を指定します。

    • BLKSIZE : BLKSIZE属性を指定します。(例: BLKSIZE=4096)

    • LRECL : LRECL属性を指定します。

    • KEYLEN : KEYLEN属性を指定します。

    • KEYOFF : KEYOFF属性を指定します。

    • DCB : DCB属性を指定します。(例: DCB=(RECFM=FB、LRECL=80))

    flags(入力)

    割り当てる際のオプションを指定します。

    • TDCB_ALLOCATE_DEFAULT : デフォルトの指定オプションです。

    • TDCB_ALLOCATE_NOLOCK : ロックを無効にするときに使用します。

    • TDCB_ALLOCATE_NOACHK : 権限チェックを実行しません。

    • TDCB_ALLOCATE_TEMPORARY : 一時データセットを指定します。

    • TDCB_ALLOCATE_DISPACHK : 割り当ての前にディスポジションへの権限チェックを行います。

    • TDCB_ALLOCATE_UNNAMED_TAPE : 名前を指定しないテープ・データセットを指定します。

  • 戻り値

    正常に割り当てを実行した場合は、負数以外の割り当てハンドルを返し、エラーが発生した場合は、エラーが発生した関数をエラーメッセージとして出力し、負数のエラーコードを返します。エラーコードは、oferrorツールで確認できます。

6.2. tdcb_concatenate()

tdcb_allocate() APIから返されたハンドルの値をパラメータとして、データセットの連結を行います。

  • プロトタイプ

    int tdcb_concatenate(int handle, char *ddparam, int flags);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_allocate() APIから返されたハンドルを指定します。

    ddparam(入力)

    DD属性を文字列で指定します。

    各属性はコンマ(,)で区切ります。

    • DSNAME : データセット名を記述します。(例: DSNAME=ABC)

    • DISP : 使用可能ステータス、正常終了DISP、異常終了DISPを指定します。(例: DISP=(NEW、CATLG))

    • DATACLAS : データセットのDATACLASを指定します。(例: DATACLAS=ACLS)

    • MGMTCLAS : データセットのMGMTCLASを指定します。

    • STORCLAS : データセットのSTORCLASを指定します。

    • VOL=SER : ボリューム・シリアル情報を指定します。(例: VOL=SER=DEFVOL

    • SPACE : SPACE属性を指定します。(例: SPACE=(CYL,(1,1),RLSE))

    • DSORG : DSORG属性を指定します。(例: DSORG=PS)

    • RECFM : RECFM属性を指定します。

    • BLKSIZE : BLKSIZE属性を指定します。(例: BLKSIZE=4096)

    • LRECL : LRECL属性を指定します。

    • KEYLEN : KEYLEN属性を指定します。

    • KEYOFF : KEYOFF属性を指定します。

    • DCB : DCB属性を指定します。(例: DCB=(RECFM=FB、LRECL=80)

    flags(入力)

    連結時のオプションを指定します。

    • TDCB_CONCATENATE_DEFAULT : デフォルトの指定オプションです。

    • TDCB_CONCATENATE_NOLOCK : ロックを無効にするときに使用します。

    • TDCB_CONCATENATE_SPOOL : スプール属性を持つときに指定します。

    • TDCB_CONCATENATE_NOACHK : 権限チェックを実行しません。

    • TDCB_CONCATENATE_TEMPORARY : 一時データセットを指定します。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーが発生した関数をエラーメッセージとして出力し、負数のエラーコードを返します。エラーコードは、oferrorツールで確認できます。

6.3. tdcb_unallocate()

tdcb_allocate() APIを実行して動的割り当てを行ったデータセットを解放します。

データセットに対してCLOSEを実行した後、割り当ての解除を行います。

  • プロトタイプ

    int tdcb_unallocate(int handle, int disp, int flags);
  • パラメータ

    パラメータ 説明

    handle(入力)

    tdcb_allocate() APIから返された割り当てハンドルです。

    disp(入力)

    正常終了か、あるいは異常終了かを指定します。

    • TDCB_UNALLOCATE_DISP_NORMAL : 正常終了のときに指定します。

    • TDCB_UNALLOCATE_DISP_ABNORMAL : 異常終了のときに指定します。

    flags(入力)

    割り当て解除のオプションを指定します。

    • TDCB_UNALLOCATE_DEFAULT : デフォルトの指定オプションです。

  • 戻り値

    正常に実行された場合は0を返し、エラーが発生した場合は、エラーが発生した関数をエラーメッセージとして出力し、負数のエラーコードを返します。エラーコードは、oferrorツールで確認できます。