2.5 バッファ・タイプの確認

tptypes(3c)関数は、バッファのタイプとサブタイプ(指定されている場合)を返します。次はtptypes()関数のシグネチャです:

long
tptypes(char *ptr, char *type, char *subtype)

次の表は、tptypes()関数の引数を示しています。

表2-4 tptypes()関数の引数

引数 説明
ptr データ・バッファを指すポインタ。このポインタは、tpalloc()またはtprealloc()の呼出しで設定されます。NULLは指定できません。また、文字型にキャストする必要があります。この2つの条件が満たされていない場合、tptypes()関数は引数が無効であることを示すエラーを返します。
type データ・バッファのタイプを指すポインタ。typeは文字型の値です。
subtype データ・バッファのサブタイプ(指定されている場合)を指すポインタ。subtypeは文字型の値です。VIEWVIEW32RECORDX_C_TYPE、およびX_COMMON以外のタイプの場合、返されたsubtypeパラメータはNULL文字列を含む文字配列を指します。

ノート:

RECORD型バッファの場合、レコード名の最大長(subtype)は32バイトです。レコード名の長さが16バイトより長い場合、tptypes()ではサブタイプの最初の16バイトが移入されますが、RECORD *ポインタはレコード名全体の先頭を指します。

処理が正常に終了した場合、tptypes()関数は長精度型(long)でバッファの長さを返します。

エラーが発生した場合、tptypes()-1を戻し、tperrno(5)に対応するエラー・コードを設定します。エラー・コードのリストについては、『Oracle Tuxedo ATMI C関数リファレンス』のC言語アプリケーション・トランザクション・モニター・インタフェースの紹介に関する項およびtpalloc(3c)に関する項を参照してください。

次のリストに示すように、処理の正常終了時にtptypes()から戻されたサイズ値を使用して、デフォルトのバッファ・サイズがデータを格納するのに十分な大きさかどうかを確認できます。

バッファ・サイズの取得のリスト

. . .
iptr = (FBFR *)tpalloc("FML", NULL, 0);
ilen = tptypes(iptr, NULL, NULL);
. . .
if (ilen < mydatasize)
     iptr=tprealloc(iptr, mydatasize);

関連項目: