2.2 型付きバッファの割当て
初期状態では、バッファはクライアント・プロセスに関連付けられていません。クライアント・プロセスでメッセージを送信する場合、サポートされているタイプのバッファを割り当てて、メッセージを格納できるようにします。型付きバッファを割り当てるには、次に示すようにtpacall(3c)
関数を使用します:
char*
tpalloc(char *type, char *subtype, long size)
次の表は、tpalloc()
関数の引数を示しています。
表2-2 tpalloc()関数の引数
引数 | 説明 |
---|---|
type
|
有効な型付きバッファを指すポインタ。 |
subtype
|
VIEW記述ファイルでVIEW 、VIEW32 、X_COMMON またはRECORD 型バッファに指定されているサブタイプの名前を指すポインタ。
|
size
|
バッファのサイズです。
Oracle Tuxedoシステムにより、
STRING 、CARRAY 、X_OCTET 、およびXML を除くすべての型付きバッファのデフォルト・サイズは1024バイトです。STRING 型バッファのデフォルト・サイズは512バイトです。CARRAY 、X_OCTET 、およびXML にデフォルト値はありません。これらの型付きバッファには、ゼロより大きな値を指定する必要があります。サイズが指定されていない場合、引数にはデフォルト値の0が使用されます。その結果、tpalloc() 関数はNULL ポインタを返して、tperrnoにTPEINVAL を設定します。
|
次のリストで示すように、VIEW
、VIEW32
、X_C_TYPE
およびX_COMMON
型バッファにはsubtype
引数が必要です。
VIEW型バッファの割当てのリスト
struct aud *audv; /* pointer to aud view structure */
. . .
audv = (struct aud *) tpalloc("VIEW", "aud", sizeof(struct aud));
. . .
次のリストは、FML型バッファの割当て方法を示しています。subtype
引数にNULL値が指定されていることに注目してください。
FML型バッファの割当てのリスト
FBFR *fbfr; /* pointer to an FML buffer structure */
. . .
fbfr = (FBFR *)tpalloc("FML", NULL, Fneeded(f,v))
. . .
次のリストは、CARRAY
型バッファの割当て方法を示しています(このバッファ型では、size
値を指定する必要があります)。
CARRAY型バッファの割当てのリスト
char *cptr;
long casize;
. . .
casize = 1024;
cptr = tpalloc("CARRAY", NULL, casize);
. . .
処理が正常に終了すると、tpalloc()
関数はchar
型のポインタを返します。STRING
とCARRAY
以外のタイプでは、ポインタを適切なC構造体またはFMLポインタにキャストする必要があります。
tpalloc()
関数は、エラーを検出するとNULLポインタを返します。次は、エラー条件の例です。
CARRAY
、X_OCTET
またはXML
型バッファのsize
値が指定されていませんtype
(またはVIEW
の場合はsubtype
)が指定されていません- システムで認識されない値が
type
に指定されています - 割当てを行う前に、アプリケーションに参加できませんでした。
エラー・コードとその説明の完全なリストについては、『Oracle Tuxedo ATMI C関数リファレンス』のtpalloc(3c)
に関する項を参照してください。
次のリストは、STRING
型バッファの割当て方法を示しています。この例では、tpalloc()
のsize
引数の値として、関連するデフォルト・サイズが使用されています。
STRING型バッファの割当てのリスト
char *cptr;
. . .
cptr = tpalloc("STRING", NULL, 0);
. . .
次のリストは、RECORD型バッファの割当て方法を示しています。この例では、サイズはFrneeded()
から取得されます。RECORD型バッファには、サブタイプ引数が必要です。
RECORD型バッファの割当てのリスト
struct RECORD *rec; /* pointer to an RECORD buffer structure */
. . .
rec = (struct RECORD *)tpalloc("RECORD", "CUSTOMER", Frneeded("CUSTOMER"));
. . .
関連項目:
- データのバッファへの格納
- 型付きバッファのサイズの変更
- 『Oracle Tuxedo ATMI C関数リファレンス』の
tpalloc(3c)
に関する項 - 『FMLを使用したOracle Tuxedo ATMIアプリケーションのプログラミング』
親トピック: 型付きバッファの管理