Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス C言語編


dc_dam_write

〈このページの構成〉

名称

論理ファイルへブロックの出力

形式

ANSI C ,C++の形式

#include <dcdam.h>
int  dc_dam_write(int damfd,struct DC_DAMKEY *keyptr,int keyno,
                  char *bufadr,int bufsize,DCLONG flags)

K&R版 C の形式

#include <dcdam.h>
int  dc_dam_write(damfd,keyptr,keyno,bufadr,bufsize,flags)
int             damfd;
struct DC_DAMKEY *keyptr;
int             keyno;
char            *bufadr;
int             bufsize;
DCLONG          flags;

機能

指定したブロックを出力します。ブロックを出力するタイミングを次に示します。

複数のブロックを一括して出力要求したときに,指定したブロックのうちで一つでもエラーになると,処理を中断してエラーリターンします。このときはブロックを出力しません。

論理ファイルのブロックを出力するときは,dc_dam_open関数で返されたリターン値のファイル記述子を設定します。

UAPで値を設定する引数

●damfd

ブロックを出力するファイルの,ファイル記述子を設定します。

●keyptr

出力するブロックの範囲を示す構造体(DAMキー)のアドレスを設定します。構造体にはブロックの範囲を,先頭の相対ブロック番号と最後の相対ブロック番号で設定します。構造体の形式は次のとおりです。

struct DC_DAMKEY {
                  int fstblkno;
                  int endblkno;
                  };
  • fstblkno

    出力するブロックの先頭の相対ブロック番号を設定します。

  • endblkno

    出力するブロックの,最後の相対ブロック番号を設定します。0を設定した場合は,fstblknoで設定した相対ブロック番号のブロックだけを出力します。

●keyno

keyptrで設定する構造体の数(構造体の配列数)を設定します。

●bufadr

更新データのアドレスを設定します。

●bufsize

出力データ長を(出力ブロック長×出力ブロック数)以上の値で設定します。設定できる範囲は504〜2147483647です。

●flags

排他エラーが起こったとき,排他解除待ちをするかどうかを設定します。

DCDAM_WAIT… 排他解除待ちをします。

DCDAM_NOWAIT… 待たないで,エラーリターンします。

DCNOFLAGS… dc_dam_open関数のflagsに設定した値に従います。

DCNOFLAGSを設定した場合は次のようになります。

  • dc_dam_open関数でDCDAM_WAITを設定していれば,排他解除待ち

  • dc_dam_open関数でDCDAM_NOWAITを設定,または省略している場合はエラーリターン

damfdに設定したファイル記述子のdc_dam_open関数が,排他種別にファイル排他を設定していた場合は,ここに設定する値は意味を持ちません。

リターン値

リターン値

リターン値(数値)

意味

DC_OK

0

すべてのブロック出力は正常に終了しました。

DCDAMER_PROTO

-1600

dc_rpc_open関数を呼び出していません。

トランザクションの範囲外で,dc_dam_write関数を呼び出しています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。

ユーザサービス定義のatomic_updateオペランドの指定が'N'になっています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。

dc_dam_start関数を呼び出していません(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。

次に示すように,UAPを正しくリンケージしていません。

  • DAMサービスの関数でTAMファイルにアクセスする場合に使うライブラリ(-ltdam)を,不当にリンケージしています。

  • トランザクション制御用オブジェクトファイルのリソースマネジャ登録が間違っています。

DCDAMER_EXCER

-1602

排他エラーが起こりました。

DCDAMER_BADF

-1603

damfdに設定したファイル記述子は正常にオープンして得られたファイル記述子ではありません。

DAMファイルをオープンしていません。

DCDAMER_BUFER

-1604

出力データ長(出力ブロック長×出力ブロック数)が短過ぎます。

出力データ長に設定した値は,設定できる範囲を超えています。

DCDAMER_SEQER

-1605

関数を呼び出す順序が間違っています。

DCDAMER_BNOER

-1606

相対ブロック番号が間違っています。

DCDAMER_NOMEM

-1607

メモリが不足しました。

DCDAMER_PARAM_KEYNO

-1609

keynoに1より小さい値を設定しています。

DCDAMER_PARAM_FLAGS

-1611

flagsに設定した値が間違っています。

DCDAMER_JNLOV

-1613

ブロック更新した回数が,DAMサービス定義の1トランザクションで更新できる最大ブロック数に指定した値を超えました(回復対象のDAMファイルにアクセスした場合だけリターンされます)。

DCDAMER_IOER

-1620

出力エラーが起こりました(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。

DCDAMER_LHOLD

-1621

damfdに設定したファイルが,論理閉塞されています。

DCDAMER_OHOLD

-1622

damfdに設定したファイルが,障害閉塞されています。

DCDAMER_ACCESS

-1628

アクセスしようとしたDAMファイルは,セキュリティ機能で保護されています。dc_dam_write関数を呼び出したUAPには,アクセス権限がありません。

DCDAMER_TMERR

-1629

トランザクションサービスでエラーが起こりました(回復対象のDAMファイルにアクセスした場合だけリターンされます)。

DCDAMER_BUFOV

-1641

出力データ長(出力ブロック長×出力ブロック数)が長過ぎます。

DCDAMER_DLOCK

-1642

デッドロックが起こりました。

DCDAMER_TIMOUT

-1643

ロックサービス定義で指定した待ち時間のタイムアウトのため,資源を確保できませんでした。

DCDAMER_LCKOV

-1645

最大同時排他要求数を超えて,排他を要求しています。

DCDAMER_ACSOV

-1648

アクセスできる最大ブロック数を超えました(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。

注※

詳細については,マニュアル「OpenTP1 システム定義」のDAMサービス定義のdam_update_blockオペランドを参照してください。

注意事項

リターン値DCDAMER_JNLOV,DCDAMER_ACSOVがリターンした場合,次のどれかの方法で処置してください。

定義を変更する場合は,マニュアル「OpenTP1 システム定義」のDAMサービス定義のdam_update_blockオペランド,およびdam_update_block_overオペランドを参照し,注意事項を確認してください。