Linkexpress 利用者プログラム開発ガイド |
目次
索引
![]() ![]() |
第5章 補足情報 |
利用者プログラムから転送APIを利用する場合の注意事項を説明します。
Linkexpress本体が利用者プログラムからの転送APIシーケンスを監視します。例えば、応答側(転送監視機能)で転送開始受付のgetinf()を復帰後、ftrnrsp()発行されない場合、起動側は無応答状態となります。このような状態を回避するために、無通信監視タイマを設定することを推奨します。設定した時間内に次の転送APIが発行されない場合は、Linkexpress本体がファイル転送をエラー終了させます。
設定は、ネットワーク定義のpath定義命令でappltimeオペランドを指定することで有効になります。オペランド省略時は、無通信監視を実施しません。
また、転送APIとは直接の関係はありませんが、ネットワーク上の無通信監視を実施することを推奨します。ネットワーク上、一時的な通信エラーが発生する可能性は十分に考えられます。設定は、ネットワーク定義のpath定義命令でrecvtimeオペランドを指定することで有効になります。オペランド省略時は、3分で監視します。(注)
注) Linkexpress V4.0L10相当以前のrecvtimeオペランド省略時は無通信監視を実施しません。
ネットワーク上の一時的な通信エラー等、ファイル転送をリトライすることでリカバリ可能なエラーがあります。詳細は「運用ガイド」の「1.2.5 ファイル転送のリトライ」を参照してください。エラー情報が該当する場合はファイル転送をリトライしてください。エラー分類/エラーコードは転送API関数に通知されます。
なお、起動側要求の場合のリトライ可能なエラー情報であり、ファイル転送をリトライするとは、sndfile(), rcvfile(), exejob(), sndmsg() を再度要求するという意味です。エラー復帰後、リトライする場合は、リトライするまでのインターバルおよび回数を考慮する必要があります。回線異常が発生した場合等を考慮して、数秒〜数分間のインターバルを設け、無限リトライしないようにしてください。
また、autorecovery機能を利用することを推奨します。本機能を利用することで、利用者プログラムでのリトライ処理は不要となります。本機能については、「導入ガイド」の「3.5 autorecovery機能の設計」を参照してください。autorecovery機能はLinkexpress V5.0L10相当でサポートしています。
転送API関数は関数処理が正常終了した場合、0で復帰します。また、関数処理がエラー終了した場合、-1で復帰します。なお、-2で復帰するエラー情報もありますので詳細はGETINFを参照してください。
例えば、sndfile()関数で完了復帰型によるファイル送信を実施した場合、ファイル送信処理がエラー終了すると、sndfile()関数は-1でエラー復帰します。これは、sndfile()関数がファイル送信処理を実施する関数のためです。
しかし、sndfile()関数で突き放し型によるファイル送信を実施した場合、ファイル送信処理がエラー終了しても、転送完了を受信するgetinf()関数は正常終了の 0で復帰します。ファイル送信エラーを表すエラー分類/エラーコードは、output領域で通知されます。getinf()関数がファイル転送エラーで-1復帰しないのは、getinf()関数は転送開始/完了情報を利用者プログラムへ通知する関数のためです。正しく利用者プログラムへ情報を通知できる場合は、0で復帰します。
また、getinf()関数が0で復帰する場合、エラー分類/エラーコードに関係なく、利用者プログラムはftrnrsp()関数、またはtrancomp()関数を必ず発行してください。
転送API関数呼び出し時、入出力パラメタの構造体は必ずゼロクリアしてください。input_dcb, output_dcbだけでなく、input_dcb内で構造体を利用する場合は、その構造体もゼロクリアしてください。ゼロクリアしていない場合、転送API関数を呼び出した延長で不当な情報が残っている場合があり、Linkexpressはその不当な情報を参照して誤動作することがあります。
転送APIの提供機能で説明している転送監視機能に関して、性能等を考えると常駐型利用者プログラムを推奨します。しかし、常駐型利用者プログラムの処理論理は非常駐型と比較して複雑になります。詳細は転送監視型(応答側)利用者プログラムの動作例を参照してください。
ここでは、推奨する一般的な常駐型利用者プログラムの処理シーケンスを説明します。
API関数の入力パラメタのappl_nameオペランドは、ネットワーク定義のpath定義命令applオペランドで指定した応用プログラム名を指定します。なお、"@_LE"および"@_DB"で始まる名称は、Linkexpress予約語なので使用しないでください。
また、業務定義や転送コマンドで利用する場合は、"@_LEXPSV","@_LEXPCT"および
"@_LEXPJB"がLinkexpress予約語です。この応用プログラム名を利用者プログラムのAPIインタフェースで利用した場合、意図した動作ができなくなりますので、必ずLinkexpress予約語以外を利用してください。
Windows Vista上で、Linkexpressが提供する利用者プログラムインタフェースを利用した利用者プログラムを実行する場合、システム管理者権限に昇格する必要があります。コマンドプロンプトから実行する場合は、コマンドプロンプトの起動時に「管理者として実行」を選択します。「管理者として実行」する方法については、「Windowsヘルプとサポート」を確認してください。
Linkexpressライブラリをリンケージすることにより、利用者プログラムはマルチスレッド構成となります。このため、以下の注意事項にしたがって利用者プログラムを作成してください。
void LxApiInit(); /* 引数はありません */ |
Linkexpressのインストールディレクトリ\include\lxapi.h |
Linkexpressのインストールディレクトリ\lib\f3eatrnfapi.lib |
目次
索引
![]() ![]() |