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-1600dc_rpc_open関数を呼び出していません。
ユーザサービス定義のatomic_updateオペランドの指定が'N'になっています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。
ユーザサービス定義のatomic_updateオペランドの指定が'N'の場合に,dc_dam_start関数を呼び出していません(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。
次に示すように,UAPを正しくリンケージしていません。
  • DAMサービスの関数でTAMファイルにアクセスする場合に使うライブラリ(-ltdam)を,不当にリンケージしています。
  • トランザクション制御用オブジェクトファイルのリソースマネジャ登録が間違っています。
DAMファイルの排他を,トランザクションの範囲外から指定しています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。
グローバルトランザクション単位の排他制御で,DAMファイルにファイル排他を設定しています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。
DCDAMER_UNDEF-1601lfnameに設定した論理ファイル名は定義されていません。
DCDAMER_EXCER-1602排他エラーが起こりました。
DCDAMER_SEQER-1605ユーザサービス定義のatomic_updateオペランドの指定が'Y'の場合に,dc_dam_start関数を呼び出していません(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。
DCDAMER_NOMEM-1607メモリが不足しました。
DCDAMER_OPENED-1608lfnameに設定した論理ファイルはオープン済みです。
DCDAMER_PARAM_LFNAME-1610論理ファイル名に設定した値が間違っています。
DCDAMER_PARAM_FLAGS-1611flagsに設定した値が間違っています。
DCDAMER_LHOLD-1621lfnameに設定したファイルは論理閉塞されています。
DCDAMER_OHOLD-1622lfnameに設定したファイルは障害閉塞されています。
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がありません。