分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス C言語編

[目次][索引][前へ][次へ]

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;
 

機能

論理ファイルをオープンします。

UAPで値を設定する引数

●lfname

オープンするファイルの論理ファイル名を,1〜8バイトの名称で設定します。

●flags

ファイル排他をするかブロック排他をするか,排他エラー時に排他解除待ちをするかどうかを設定します。次の形式で設定します。

 
{DCDAM_FILE_EXCLUSIVE|DCDAM_BLOCK_EXCLUSIVE
                                〔|{DCDAM_WAIT|DCDAM_NOWAIT}〕}
 

どちらも設定しなかった場合は,DCDAM_NOWAITが仮定されます。

flagsの設定方法

flagsに設定できる値は,使うDAMファイルが回復対象かどうかで異なります。

回復対象か回復対象外かに関係なく,フラグ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サービスの関数でTAMファイルにアクセスする場合に使うライブラリ(-ltdam)を,不当にリンケージしています。
  • トランザクション制御用オブジェクトファイルのリソースマネジャ登録が間違っています。
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がありません。