dc_dam_rewrite

名称

論理ファイルのブロックの更新

形式

ANSI C ,C++の形式

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

K&R版 C の形式

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

機能

dc_dam_read関数で入力したブロックを更新目的で出力します。または更新要求を取り消します。ブロックを更新するタイミングを次に示します。

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

論理ファイルのブロックを更新するときは,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_UPDATE
更新要求
DCDAM_CANCEL
更新要求の取り消し

リターン値

リターン値リターン値(数値)意味
DC_OK0すべてのブロック更新は正常に終了しました。
DCDAMER_PROTO-1600dc_rpc_open関数を呼び出していません。
トランザクションの範囲外で,dc_dam_rewrite関数を呼び出しています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。
ユーザサービス定義のatomic_updateオペランドの指定が'N'になっています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。
dc_dam_start関数を呼び出していません(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。
次に示すように,UAPを正しくリンケージしていません。
  • DAMサービスの関数でTAMファイルにアクセスする場合に使うライブラリ(-ltdam)を,不当にリンケージしています。
  • トランザクション制御用オブジェクトファイルのリソースマネジャ登録が間違っています。
DCDAMER_BADF-1603damfdに設定したファイル記述子は正常にオープンして得られたファイル記述子ではありません。
DAMファイルをオープンしていません。
DCDAMER_BUFER-1604更新データ長(更新ブロック長×更新ブロック数)が短過ぎます。
更新データ長に設定した値は,設定できる範囲を超えています。
DCDAMER_SEQER-1605更新目的のdc_dam_read関数を呼び出していません。
DCDAMER_BNOER-1606相対ブロック番号が間違っています。
DCDAMER_NOMEM-1607メモリが不足しました。
DCDAMER_PARAM_KEYNO-1609keynoに1より小さい値を設定しています。
DCDAMER_PARAM_FLAGS-1611flagsに設定した値が間違っています。
DCDAMER_JNLOV-1613ブロック更新した回数が,DAMサービス定義の1トランザクションで更新できる最大ブロック数に指定した値を超えました(回復対象のDAMファイルにアクセスした場合だけリターンされます)。
DCDAMER_IOER-1620出力エラーが起こりました(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。
DCDAMER_LHOLD-1621damfdに設定したファイルが,論理閉塞されています。
DCDAMER_OHOLD-1622damfdに設定したファイルが,障害閉塞されています。
DCDAMER_TMERR-1629トランザクションサービスでエラーが起こりました。
DCDAMER_BUFOV-1641更新データ長(更新ブロック長×更新ブロック数)が長過ぎます。
注※
詳細については,マニュアル「OpenTP1 システム定義」のDAMサービス定義のdam_update_blockオペランドを参照してください。

注意事項

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

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