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