dc_dam_open
- 〈このページの構成〉
形式
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;
機能
論理ファイルをオープンします。
-
回復対象のDAMファイルの場合
論理ファイルに対して,ファイル排他をするかブロック排他をするかを設定します。
ファイル排他を指定できるのは次の場合です。
-
トランザクションブランチ単位で排他制御する指定で,トランザクションの範囲内で論理ファイルをオープンした場合
次に示す場合は,ファイル排他を指定できません。ブロック排他で排他制御をしてください。
-
トランザクションの範囲外で論理ファイルをオープンした場合
-
グローバルトランザクション単位で排他制御する指定をした場合
同じトランザクションブランチ内では,いったんdc_dam_close関数でクローズした論理ファイルを再びオープンした場合,dc_dam_close関数を呼び出す前の状態を引き継ぎます。
-
-
回復対象外のDAMファイルの場合
トランザクション処理とは同期しないため,排他に関する制限はありません。
UAPで値を設定する引数
●lfname
オープンするファイルの論理ファイル名を,1〜8バイトの名称で設定します。
●flags
ファイル排他をするかブロック排他をするか,排他エラー時に排他解除待ちをするかどうかを設定します。次の形式で設定します。
{DCDAM_FILE_EXCLUSIVE|DCDAM_BLOCK_EXCLUSIVE 〔|{DCDAM_WAIT|DCDAM_NOWAIT}〕}
-
フラグ1
ファイル排他をするかブロック排他をするかを設定します。
DCDAM_FILE_EXCLUSIVE…ファイル排他
DCDAM_BLOCK_EXCLUSIVE…ブロック排他
-
フラグ2
排他エラーが起こったとき,排他解除待ちをするかどうかを設定します。
DCDAM_WAIT……排他解除待ちをします。
DCDAM_NOWAIT…待たないで,エラーリターンします。
どちらも設定しなかった場合は,DCDAM_NOWAITが仮定されます。
flagsの設定方法
flagsに設定できる値は,使うDAMファイルが回復対象かどうかで異なります。
-
回復対象のDAMファイルの場合
フラグ2の排他解除待ちは,dc_dam_read関数,dc_dam_write関数で排他エラーが起こった場合の設定となります。dc_dam_open関数で排他エラーが起こった場合の設定ではありません。dc_dam_open関数で排他エラーが起こった場合には,無条件にDCDAMER_EXCERでエラーリターンします。
回復対象のDAMファイルにアクセスする場合の,flagsに設定したフラグと排他の設定内容を次に示します。
フラグ1
フラグ2※
flagsの設定内容
FILE_EXCLUSIVE
×
ファイル排他
BLOCK_EXCLUSIVE
WAIT
ブロック排他,排他エラー時は解除待ち
NOWAIT
ブロック排他,排他エラー時はエラーリターン
-
回復対象外のDAMファイルの場合
フラグ2の排他解除待ちは,排他エラーが起こった場合の設定となります。dc_dam_open関数,dc_dam_read関数,およびdc_dam_write関数で排他エラーが起こった場合に,フラグ2に設定した値に従って,排他の解除を待つかどうかが決まります。フラグ2にDCDAM_NOWAITを設定,または省略した場合に排他エラーが起こったときは,DCDAMER_EXCERでエラーリターンします。
回復対象外のDAMファイルにアクセスする場合の,flagsに設定したフラグと排他の設定内容を次に示します。
フラグ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がありません。 |