分散トランザクション処理機能 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;
                  };
 

●keyno

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

●bufadr

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

●bufsize

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

●flags

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

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

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

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

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

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オペランドを参照し,注意事項を確認してください。