2.2 型付きバッファの割当て

初期状態では、バッファはクライアント・プロセスに関連付けられていません。クライアント・プロセスでメッセージを送信する場合、サポートされているタイプのバッファを割り当てて、メッセージを格納できるようにします。型付きバッファを割り当てるには、次に示すようにtpacall(3c)関数を使用します:

char*
tpalloc(char *type, char *subtype, long size)

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

表2-2 tpalloc()関数の引数

引数 説明
type 有効な型付きバッファを指すポインタ。
subtype VIEW記述ファイルでVIEWVIEW32X_COMMONまたはRECORD型バッファに指定されているサブタイプの名前を指すポインタ。

subtypeがない場合、この引数にはNULL値が使用されます。

size バッファのサイズです。

Oracle Tuxedoシステムにより、CARRAY、X_OCTETおよびXMLを除くすべての型付きバッファに、自動的にデフォルトのバッファ・サイズが割り当てられます。自動的にバッファ・サイズが割り当てられないバッファ型には、バッファの終わりを識別できるようにサイズを指定する必要があります。

CARRAYX_OCTET、およびXMLを除くすべての型付きバッファのサイズにゼロが指定されると、各型付きバッファに割り当てられているデフォルト値が使用されます。サイズが指定されている場合、指定されたサイズまたはそのバッファ型に割り当てられているデフォルト値のうちの大きい方が使用されます。

STRINGCARRAYX_OCTET、およびXMLを除くすべての型付きバッファのデフォルト・サイズは1024バイトです。STRING型バッファのデフォルト・サイズは512バイトです。CARRAYX_OCTET、およびXMLにデフォルト値はありません。これらの型付きバッファには、ゼロより大きな値を指定する必要があります。サイズが指定されていない場合、引数にはデフォルト値の0が使用されます。その結果、tpalloc()関数はNULLポインタを返して、tperrnoにTPEINVALを設定します。

次のリストで示すように、VIEWVIEW32X_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型のポインタを返します。STRINGCARRAY以外のタイプでは、ポインタを適切なC構造体またはFMLポインタにキャストする必要があります。

tpalloc()関数は、エラーを検出するとNULLポインタを返します。次は、エラー条件の例です。

  • CARRAYX_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"));
 . . .

関連項目: