dc_dam_read
名称
論理ファイルからブロックの入力
形式
ANSI C ,C++の形式
#include <dcdam.h>
int dc_dam_read(int damfd,struct DC_DAMKEY *keyptr,int keyno,
char *bufadr,int bufsize,DCLONG flags)
K&R版 C の形式
#include <dcdam.h>
int dc_dam_read(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_REFERENCE|DCDAM_MODIFY}
〔|{DCDAM_EXCLUSIVE|DCDAM_NOEXCLUSIVE}〕
〔|{DCDAM_WAIT|DCDAM_NOWAIT}〕
どちらも設定しなかった場合は次のようになります。
flagsの値に設定したフラグと,排他の設定内容の対応を次に示します。
フラグ1 | フラグ2※1 | フラグ3※2 | flagsの設定内容 |
---|---|---|---|
REFERENCE | EXCLUSIVE | WAIT | 参照目的,排他あり,排他エラー時は解除待ち |
NOWAIT | 参照目的,排他あり,排他エラー時はエラーリターン | ||
NOEXCLUSIVE | × | 参照目的,排他なし※3 | |
MODIFY | × | WAIT | 更新目的,排他エラー時は解除待ち |
NOWAIT | 更新目的,排他エラー時はエラーリターン |
リターン値
リターン値 | リターン値(数値) | 意味 |
---|---|---|
DC_OK | 0 | すべてのブロック入力は正常に終了しました。 |
DCDAMER_PROTO | -1600 | dc_rpc_open関数を呼び出していません。 |
トランザクションの範囲外で,更新目的の入力,または排他を指定した参照目的の入力をしています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。 | ||
ユーザサービス定義のatomic_updateオペランドの指定が'N'になっています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。 | ||
dc_dam_start関数を呼び出していません(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。 | ||
次に示すように,UAPを正しくリンケージしていません。
| ||
DCDAMER_EXCER | -1602 | 排他エラーが起こりました。 |
DCDAMER_BADF | -1603 | damfdに設定したファイル記述子は正常にオープンして得られたファイル記述子ではありません。 |
DAMファイルをオープンしていません。 | ||
DCDAMER_BUFER | -1604 | すべてのブロックを入力するためには,入力バッファ長に設定した長さは不十分です。 |
入力バッファ長に設定した値は,設定できる範囲を超えています。 | ||
DCDAMER_BNOER | -1606 | 相対ブロック番号が間違っています。 |
DCDAMER_NOMEM | -1607 | メモリが不足しました。 |
DCDAMER_PARAM_KEYNO | -1609 | keynoに1より小さい値を設定しています。 |
DCDAMER_PARAM_FLAGS | -1611 | flagsに指定した値が間違っています。 |
DCDAMER_JNLOV | -1613 | ブロック更新した回数※が,DAMサービス定義の1トランザクションで更新できる最大ブロック数に指定した値を超えました(回復対象のDAMファイルにアクセスした場合だけリターンされます)。 |
DCDAMER_VERSION | -1618 | UAPが,現在稼働しているDAMサービスでは動作できないバージョンのDAMライブラリと結合されています。 |
DCDAMER_IOER | -1620 | 入力エラーが起こりました。 |
DCDAMER_LHOLD | -1621 | damfdに設定したファイル記述子のファイルが,論理閉塞されています。 |
DCDAMER_OHOLD | -1622 | damfdに設定したファイル記述子のファイルが,障害閉塞されています。 |
DCDAMER_ACCESS | -1628 | アクセスしようとしたDAMファイルは,セキュリティ機能で保護されています。dc_dam_read関数を呼び出したUAPには,アクセス権限がありません。 |
DCDAMER_TMERR | -1629 | トランザクションサービスでエラーが起こりました(回復対象のDAMファイルにアクセスした場合だけリターンされます)。 |
DCDAMER_DLOCK | -1642 | デッドロックが起こりました。 |
DCDAMER_TIMOUT | -1643 | ロックサービス定義で指定した待ち時間のタイムアウトのため,資源を確保できませんでした。 |
DCDAMER_LCKOV | -1645 | 最大同時排他要求数を超えて,排他を要求しています。 |
DCDAMER_ACSOV | -1648 | 回復対象外のDAMファイルにアクセスできるブロック数※を超えました(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。 |
注意事項
リターン値DCDAMER_JNLOV,DCDAMER_ACSOVでリターンした場合,次のどれかの方法で処置してください。
定義を変更する場合は,マニュアル「OpenTP1 システム定義」のDAMサービス定義のdam_update_blockオペランド,およびdam_update_block_overオペランドを参照し,注意事項を確認してください。