分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス C言語編
名称
形式
ANSI C ,C++の形式
#include <dcdam.h> int dc_dam_open(char *lfname,DCLONG flags)
K&R版 C の形式
#include <dcdam.h> int dc_dam_open(lfname,flags) char *lfname; DCLONG flags;
機能
論理ファイルをオープンします。
UAPで値を設定する引数
●lfname
オープンするファイルの論理ファイル名を,1〜8バイトの名称で設定します。
●flags
ファイル排他をするかブロック排他をするか,排他エラー時に排他解除待ちをするかどうかを設定します。次の形式で設定します。
{DCDAM_FILE_EXCLUSIVE|DCDAM_BLOCK_EXCLUSIVE
〔|{DCDAM_WAIT|DCDAM_NOWAIT}〕}
どちらも設定しなかった場合は,DCDAM_NOWAITが仮定されます。
flagsの設定方法
flagsに設定できる値は,使うDAMファイルが回復対象かどうかで異なります。
| フラグ1 | フラグ2※ | flagsの設定内容 |
|---|---|---|
| FILE_EXCLUSIVE | × | ファイル排他 |
| BLOCK_EXCLUSIVE | WAIT | ブロック排他,排他エラー時は解除待ち |
| NOWAIT | ブロック排他,排他エラー時はエラーリターン |
| フラグ1 | フラグ2※ | flagsの設定内容 |
|---|---|---|
| FILE_EXCLUSIVE | WAIT | ファイル排他,排他エラー時は解除待ち |
| NOWAIT | ファイル排他,排他エラー時はエラーリターン | |
| BLOCK_EXCLUSIVE | WAIT | ブロック排他,排他エラー時は解除待ち |
| NOWAIT | ブロック排他,排他エラー時はエラーリターン |
回復対象か回復対象外かに関係なく,フラグ1にファイル排他を設定するとファイル全体に排他を掛けるため,dc_dam_read関数,dc_dam_write関数で排他エラーは起こりません。そのため,排他解除待ちをするかどうかを設定できません。dc_dam_read関数,dc_dam_write関数の引数に設定した排他解除待ち種別は無視されます。
リターン値
| リターン値 | リターン値(数値) | 意味 |
|---|---|---|
| 0または正の整数 | 0または正の整数は,ファイル記述子を示します。 | |
| DCDAMER_PROTO | -1600 | dc_rpc_open関数を呼び出していません。 |
| ユーザサービス定義のatomic_updateオペランドの指定が'N'になっています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。 | ||
| ユーザサービス定義のatomic_updateオペランドの指定が'N'の場合に,dc_dam_start関数を呼び出していません(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。 | ||
次に示すように,UAPを正しくリンケージしていません。
|
||
| DAMファイルの排他を,トランザクションの範囲外から指定しています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。 | ||
| グローバルトランザクション単位の排他制御で,DAMファイルにファイル排他を設定しています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。 | ||
| DCDAMER_UNDEF | -1601 | lfnameに設定した論理ファイル名は定義されていません。 |
| DCDAMER_EXCER | -1602 | 排他エラーが起こりました。 |
| DCDAMER_SEQER | -1605 | ユーザサービス定義のatomic_updateオペランドの指定が'Y'の場合に,dc_dam_start関数を呼び出していません(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。 |
| DCDAMER_NOMEM | -1607 | メモリが不足しました。 |
| DCDAMER_OPENED | -1608 | lfnameに設定した論理ファイルはオープン済みです。 |
| DCDAMER_PARAM_LFNAME | -1610 | 論理ファイル名に設定した値が間違っています。 |
| DCDAMER_PARAM_FLAGS | -1611 | flagsに設定した値が間違っています。 |
| DCDAMER_LHOLD | -1621 | lfnameに設定したファイルは論理閉塞されています。 |
| DCDAMER_OHOLD | -1622 | lfnameに設定したファイルは障害閉塞されています。 |
| DCDAMER_OPENNUM | -1627 | キャラクタ型スペシャルファイルのオープン数が最大値を超えました。 |
| DCDAMER_ACCESS | -1628 | キャラクタ型スペシャルファイルにはアクセス権がありません。 |
| DCDAMER_TMERR | -1629 | トランザクションサービスでエラーが起こりました(回復対象のDAMファイルにアクセスした場合だけリターンされます)。 |
| DCDAMER_DLOCK | -1642 | デッドロックが起こりました(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。 |
| DCDAMER_TIMOUT | -1643 | ロックサービス定義で指定した待ち時間のタイムアウトのため資源を確保できませんでした(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。 |
| DCDAMER_LCKOV | -1645 | 最大同時排他要求数を超えて,排他を要求しています。 |
| DCDAMER_NO_ACL | -1646 | オープンしようとしたDAMファイルは,セキュリティ機能で保護されています。該当するファイルに対するACLがありません。 |
All Rights Reserved. Copyright (C) 2006, 2012, Hitachi, Ltd.