XATMIインタフェース用のスタブの作成方法について説明します。XATMIインタフェースの通信をするUAPの場合は,クライアントUAPとサーバUAPの両方に,スタブが必要です。
スタブを作成するときは,XATMIインタフェース定義を格納したファイル(XATMIインタフェース定義ファイル)を作成して,スタブを生成するコマンドを実行します。スタブを生成するコマンドを,次に示します。
作成したスタブのソースファイルは,C言語のコンパイラで翻訳して,UAPのオブジェクトファイルに結合させます。
XATMIインタフェース用スタブの作成手順を次の図に示します。
図1-9 XATMIインタフェース用スタブの作成手順(TCP/IP通信,OSI TP通信)
クライアントUAP(SUP,またはSPP)用のXATMIインタフェース定義の形式について説明します。
called_servers = { "サーバの定義ファイル名"〔,"サーバの定義ファイル名" 〕…};
called_servers = { "serv1.def" ,"serv2.def" };
called_servers = { "serv1.def" };
called_servers = { "serv2.def" };
サーバUAPのXATMIインタフェース定義に指定する項目を次に示します。指定は順不同です。
タイプ名 サブタイプ名{
データ型 データ名;
〔データ型 データ名;〕
:
:
};
表1-6 タイプで使えるデータ型の一覧
タイプ | 識別子 | C言語のデータ型 | 通信プロトコル | 備考 | |
---|---|---|---|---|---|
TCP/IP | OSI TP | ||||
X_OCTET | -※1 | -※1 | ○ | ○ | なし |
X_COMMON | short a | short a | ○ | ○ | なし |
short a[n] | short a[n] | ○ | ○ | なし | |
long a | long a | ○ | ○ | なし | |
long a[n] | long a[n] | ○ | ○ | なし | |
char a※2 | char a | ○ | ○ | 無変換配列 | |
octet a | char a | ○ | ○ | 無変換配列 | |
tchar a | char a | - | ○ | 変換配列 | |
char a[n]※2 | char a[n] | ○ | ○ | 無変換配列 | |
octet a[n] | char a[n] | ○ | ○ | 無変換配列 | |
tchar a[n] | char a[n] | - | ○ | 変換配列 | |
X_C_TYPE | short a | short a | ○ | × | なし |
short a[n] | short a[n] | ○ | × | なし | |
long a | DCLONG a | ○ | × | なし | |
long a[n] | DCLONG a[n] | ○ | × | なし | |
int4 a | DCLONG a | ○ | × | なし | |
int4 a[n] | DCLONG a[n] | ○ | × | なし | |
char a※2 | char a | ○ | × | なし | |
octet a | char a | ○ | × | なし | |
tchar a | char a | ○ | × | なし | |
char a[n]※2 | char a[n] | ○ | × | なし | |
octet a[n] | char a[n] | ○ | × | なし | |
tchar a[n] | char a[n] | ○ | × | なし | |
float a | float a | ○ | × | なし | |
float a[n] | float a[n] | ○ | × | なし | |
double a | double a | ○ | × | なし | |
double a[n] | double a[n] | ○ | × | なし | |
octet a[n][n] | char a[n][n] | ○ | × | なし | |
tchar a[n][n] | char a[n][n] | ○ | × | なし | |
str a[n] | char a[n] | ○ | × | なし | |
str a[n][n] | char a[n][n] | ○ | × | なし | |
tstr a[n] | char a[n] | ○ | × | なし | |
tstr a[n][n] | char a[n][n] | ○ | × | なし |
X_C_TYPE subtype1 {
char name[8];
int4 data[10];
int4 flags;
};
service サービス関数名{(タイプ名 〔サブタイプ名〕) | (ALL) | (〔void〕)};
service svc_func1(X_C_TYPE subtype1);
service svc_func2(X_OCTET);
service svc_func3(void); または service svc_func3();
service svc_func4(ALL);
クライアントUAPのXATMIインタフェース定義(called_servers文)を指定します。
ファイル名には,XATMIインタフェース定義ファイルを示すサフィックス".def"を必ず付けてください。XATMIインタフェース定義ファイルを格納するディレクトリは,スタブを生成するコマンド(stbmakeコマンドまたはtpstbmkコマンド)が探せるパスであれば,特に制限はありません。
XATMIインタフェース定義ファイルのファイル名の長さは,最大255文字です。ただし,OSの制限で255文字まで指定できないことがあります。
スタブを生成するコマンド(stbmakeコマンドまたはtpstbmkコマンド)を実行したあと,スタブのソースファイルはXATMIインタフェース定義ファイルとは別の名称で作成されます。そのため,OpenTP1の稼働中にはXATMIインタフェース定義ファイルは使われません。
異なるプロセスで同じ型付きバッファを使うときは,共通の型付きバッファの定義ファイルを一つ作成して,それを各プロセスの定義ファイルにインクルードできます。
インクルードする文は,C言語と同じ書式です。次のように記述します。
#include <ファイル名> または #include "ファイル名"
インクルードファイルは,スタブを生成するコマンド(stbmakeコマンドまたはtpstbmkコマンド)の-iオプションで指定したサーチパスから読み込まれます。サーチパス内に該当するファイルがない場合は,最後にカレントディレクトリを探します。
インクルードするファイルの名称は任意です(サフィックスが .h でなくてもかまいません)。ただし,そのファイルをXATMIインタフェース定義ファイルとして直接 スタブを生成するコマンド(stbmakeコマンドまたはtpstbmkコマンド)に指定する場合は,その定義の名称規則に従ってください。
インクルードするファイルの内容は,XATMIインタフェース定義ファイルと同じです。ただし,名称が重複することもありますので,自プロセス内のサービス関数の定義は含めないことをお勧めします。