6.2.4 例: TPNOTRANフラグを設定した同期メッセージの送信
次のリストは、トランザクション・モードではない通信呼出しを示しています。この呼出しは、リソース・マネージャに関連していないサービスに対して実行され、サービスがトランザクションに参加するとエラーになります。アプリケーションは、accounts
という名前のデータベースから取得した情報に基づいて生成された売掛金勘定レポートaccrcv
を出力します。
サービス・ルーチンREPORT
は指定されたパラメータを解釈し、完了したレポートのバイト・ストリームを応答として送信します。クライアントは、tpcall()
を使用してPRINTER
サービスにバイト・ストリームを送信します。PRINTERは、クライアントに近いプリンタにバイト・ストリームを送信します。そして、応答が印刷されます。最後に、PRINTER
サービスはハードコピーの印刷が終了したことをクライアントに通知します。
ノート: 「TPNOTRANとTPNOREPLYフラグを設定した非同期メッセージの送信」では、同じ例を使用して非同期メッセージの呼出しを行っています。
TPNOTRANフラグを設定した同期メッセージの送信のリスト
#include <stdio.h>
#include "atmi.h"
main()
{
char *rbuf; /* report buffer */
long r1len, r2len, r3len; /* buffer lengths of send, 1st reply,
and 2nd reply buffers for report */
join application
if (rbuf = tpalloc("STRING", NULL, 0) == NULL) /* allocate space for report
*/
leave application and exit program
(void)strcpy(rbuf,
"REPORT=accrcv DBNAME=accounts"); /* send parms of report */
r1len = strlen(rbuf)+1; /* length of request */
start transaction
if (tpcall("REPORT", rbuf, r1len, &rbuf,
&r2len, 0) == -1) /* get report print stream */
error routine
if (tpcall("PRINTER", rbuf, r2len, &rbuf,
&r3len, TPNOTRAN) == -1) /* send report to printer */
error routine
(void)printf("Report sent to %s printer\n",
rbuf); /* indicate which printer */
terminate transaction
free buffer
leave application
}
ノート:
この例のerror routine
は、エラー・メッセージの出力、トランザクションの中止、割り当てられたバッファの解放、クライアントのアプリケーションからの分離、およびプログラムの終了が行われることを示しています。
親トピック: 同期メッセージの送信