Linkexpress 利用者プログラム開発ガイド
目次 索引 前ページ次ページ

第5章 補足情報

5.1 利用者プログラム作成の際の注意事項

利用者プログラムから転送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相当でサポートしています。

getinf()関数の復帰コード

転送API関数は関数処理が正常終了した場合、0で復帰します。また、関数処理がエラー終了した場合、-1で復帰します。なお、-2で復帰するエラー情報もありますので詳細はGETINFを参照してください。

例えば、sndfile()関数で完了復帰型によるファイル送信を実施した場合、ファイル送信処理がエラー終了すると、sndfile()関数は-1でエラー復帰します。これは、sndfile()関数がファイル送信処理を実施する関数のためです。

しかし、sndfile()関数で突き放し型によるファイル送信を実施した場合、ファイル送信処理がエラー終了しても、転送完了を受信するgetinf()関数は正常終了の 0で復帰します。ファイル送信エラーを表すエラー分類/エラーコードは、output領域で通知されます。getinf()関数がファイル転送エラーで-1復帰しないのは、getinf()関数は転送開始/完了情報を利用者プログラムへ通知する関数のためです。正しく利用者プログラムへ情報を通知できる場合は、0で復帰します。

また、getinf()関数が0で復帰する場合、エラー分類/エラーコードに関係なく、利用者プログラムはftrnrsp()関数、またはtrancomp()関数を必ず発行してください。

getinf()関数と利用者プログラム停止タイミング

  1. getinf()発行状態のまま利用者プログラムは終了しないでください。Linkexpress側に資源が残留します。
  2. Linkexpress起動中に利用者プログラムだけを停止したい場合は、以下のいずれかにより対処してください。

入力パラメタ

転送API関数呼び出し時、入出力パラメタの構造体は必ずゼロクリアしてください。input_dcb, output_dcbだけでなく、input_dcb内で構造体を利用する場合は、その構造体もゼロクリアしてください。ゼロクリアしていない場合、転送API関数を呼び出した延長で不当な情報が残っている場合があり、Linkexpressはその不当な情報を参照して誤動作することがあります。

転送監視機能で常駐型利用者プログラムを作成した場合のAPIシーケンス

転送APIの提供機能で説明している転送監視機能に関して、性能等を考えると常駐型利用者プログラムを推奨します。しかし、常駐型利用者プログラムの処理論理は非常駐型と比較して複雑になります。詳細は転送監視型(応答側)利用者プログラムの動作例を参照してください。

ここでは、推奨する一般的な常駐型利用者プログラムの処理シーケンスを説明します。

利用者プログラム名

API関数の入力パラメタのappl_nameオペランドは、ネットワーク定義のpath定義命令applオペランドで指定した応用プログラム名を指定します。なお、"@_LE"および"@_DB"で始まる名称は、Linkexpress予約語なので使用しないでください。

また、業務定義や転送コマンドで利用する場合は、"@_LEXPSV","@_LEXPCT"および

"@_LEXPJB"がLinkexpress予約語です。この応用プログラム名を利用者プログラムのAPIインタフェースで利用した場合、意図した動作ができなくなりますので、必ずLinkexpress予約語以外を利用してください。

利用者プログラム実行権限

Windows Vista上で、Linkexpressが提供する利用者プログラムインタフェースを利用した利用者プログラムを実行する場合、システム管理者権限に昇格する必要があります。コマンドプロンプトから実行する場合は、コマンドプロンプトの起動時に「管理者として実行」を選択します。「管理者として実行」する方法については、「Windowsヘルプとサポート」を確認してください。

UNIXプログラミング

Linkexpressライブラリをリンケージすることにより、利用者プログラムはマルチスレッド構成となります。このため、以下の注意事項にしたがって利用者プログラムを作成してください。

  1. 以下の関数をLinkexpressライブラリとして提供しています。プロセス起動直後に、mainスレッドから必ず以下の関数を呼び出すようにしてください。本関数を発行していない場合、転送API関数内部の処理で、排他処理が正しく動作できないことがあります。なお、Windowsでは本関数は未提供です。

    void LxApiInit(); /* 引数はありません */


  2. 利用者プログラム内では「スレッドアンセイフ」関数を利用しないようにしてください。
  3. 利用者プログラムのリンケージオプションに、マルチスレッドオプションを必ず指定してください。なお、Solarisの場合で、SUN WorkShopまたはForte Developerの場合は、-mtまたは-D_REENTRANTを指定してください。

Windowsプログラミング

Windows(IPF)の場合

Windowsの場合


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 1997-2007