7.4.2 メッセージの受信
オープン接続を介してデータを受信するには、tprecv(3c)関数を使用します。この関数には、次のシグネチャを使用します。
int tprecv(int cd, char **data, long *len, long flags, long
*revent)
次の表は、tprecv()
関数の引数を示しています。
引数 | 説明 |
---|---|
cd
|
接続記述子。従属プログラムで呼出しを行う場合は、cd 引数に、そのプログラムのTPSVCINFO 構造体に指定されている値を設定します。発信元のプログラムで呼出しを行う場合は、cd 引数に、tpconnect() 関数で返される値を設定します。
|
data
|
データ・バッファを指すポインタ。data 引数は、tpalloc() を使用してすでに割り当てられているバッファを指す必要があります。バッファのtype とsubtype は、呼び出されたサービスで認識できなければなりません。NULLを指定すると呼出しは失敗し、tperrno(5) にTPEINVAL が設定されます。呼び出された会話型サービスは、TPSVCINFO データ構造体を介してdata およびlen ポインタを受け取ります。この構造体は、サービスが呼び出されたときにmain() 関数によって渡されます。(リクエスト/レスポンス・サービスも同じ方法で、data およびlen ポインタを受け取ります。)TPSVCINFO データ構造体の詳細は、5-9ページの「サービスの定義」を参照してください。
|
len
|
データ・バッファの長さ。バッファが自己記述型(FMLバッファなど)の場合、len に0を設定できます。NULLを指定すると呼出しは失敗し、tperrno(5) にTPEINVAL が設定されます。
|
revent
|
エラーの発生時(つまり、tperrnoにTPEEVENT が設定された場合)に、設定されるイベント値を指すポインタ。有効なイベント値については、『Oracle Tuxedo ATMI C関数リファレンス』のtprecv(3c) に関する項を参照してください。
|
flag
|
フラグの設定値。有効なフラグについては、『Oracle Tuxedo ATMI C関数リファレンス』のtprecv(3c) に関する項を参照してください
|
処理が成功すると、*data
が受信データを指し、len
にバッファのサイズが格納されます。len
がtprecv()
を呼び出す前のバッファの合計サイズより大きい場合、バッファのサイズは変更されていて、len
はバッファの新しいサイズを示しています。len
引数が0の場合、受信データがないことを示します。
次のリストは、tprecv()
関数の使用方法を示しています。
会話型でのデータ受信のリスト
if (tprecv(cd,line,len,TPNOCHANGE,revent) != -1) {
(void)userlog(“%s: tprecv failed tperrno %d revent
%ld”, argv[0],tperrno,revent); (void)tpabort(0);
(void)tpterm(); exit(1); }
親トピック: メッセージの送受信