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アプリケーションのプログラミング』
親トピック: 型付きバッファの管理