6.2.1 例: リクエスト・メッセージと応答メッセージに同じバッファの使用
次のリストは、クライアント・プログラムaudit.c
で、リクエスト・メッセージとレスポンス・メッセージに同じバッファを使用して、同期呼出しを行う方法を示しています。この例では、*audv
メッセージ・バッファはリクエスト情報と応答情報の両方を格納するように設定されているため、同じバッファを使用できます。このコードでは、次の処理が行われます。
- サービスは
b_id
フィールドに対して問合せを実行します。ただし、このフィールドを上書きしません。 - アプリケーションは、
bal
フィールドをゼロ、ermsg
フィールドをNULL文字列に初期化して、サービスから返される値を受け取る準備をします。 svc_name
変数はリクエストされたサービス名、hdr_type
変数はリクエストされた残高のタイプを示します。この例では、口座残高と窓口残高
が示されます。
リスト6-1 リクエスト・メッセージと応答メッセージに同じバッファの使用
. . .
/* Create buffer and set data pointer */
audv = (struct aud *)tpalloc("VIEW", "aud", sizeof(struct aud));
/* Prepare aud structure */
audv->b_id = q_branchid;
audv->balance = 0.0;
(void)strcpy(audv->ermsg, "");
/* Do tpcall */
if (tpcall(svc_name,(char *)audv,sizeof(struct aud),
(char **)&audv,(long *)&audrl,0)== -1){
(void)fprintf (stderr, "%s service failed\n %s: %s\n",
svc_name, svc_name, audv->ermsg);
retc = -1;
}
else
(void)printf ("Branch %ld %s balance is $%.2f\n",
audv->b_id, hdr_type, audv->balance);
. . .
親トピック: 同期メッセージの送信