Netcompo アプリケーション会話サービス 2.1 LU0会話サービス編 - Solaris -
|
目次
索引

|
付録A アプリケーションプログラム例
A.1 同期型アプリケーションの例
/*====================================================================*
* アプリケーションプログラム例 1 *
* *
* (1) main : メイン処理(同期型) *
* (2) procend : プロセス終了処理 *
* *
*====================================================================*/
#include <sys/types.h>
#include <stdio.h>
#include <memory.h>
#include <signal.h>
#include <errno.h>
#include "lu0.h"
/*---------------------------------------------*/
/* 外部参照モジュール */
/*---------------------------------------------*/
/*============= 出口関数 ====================*/
extern void rcvalrm(); /* タイマ用 */
extern void rcvsig(); /* ユーザ・シグナル用 */
extern void rcvend(); /* プログラム終了用 */
/*---------------------------------------------*/
/* エントリモジュール */
/*---------------------------------------------*/
void main();
void procend();
/*---------------------------------------------*/
/* ローカル定義 */
/*---------------------------------------------*/
#define NORMAL 0 /* マクロ命令復帰値正常 */
/*====================================================================*
* function name : (1) main *
* function : メイン処理(同期型) *
*====================================================================*/
void
main()
{
struct sigaction act; /* sigaction用パラメタ */
struct lu0rb rcb; /* rcb */
struct lu0rb *rcbp; /* rcbポインタ */
char *wbufp; /* 送信バッファポインタ */
char *rbufp; /* 受信バッファポインタ */
int rcvdfd; /* 受信用パイプfd退避域 */
int dc; /* 送信データ作成用 */
setbuf( stdout, 0 );
/*=============================================*/
/* タイマ出口関数登録 */
/*=============================================*/
act.sa_handler = rcvalrm; /*
*((int *)(&act.sa_mask)) = SIGALRM; /* アラーム・クロック */
act.sa_flags = NULL; /* */
sigaction( SIGALRM, &act, NULL ); /* */
/*=============================================*/
/* シグナル出口関数登録 */
/*=============================================*/
signal( SIGUSR1, rcvsig ); /* ユーザ・シグナル1 */
signal( SIGUSR2, rcvsig ); /* ユーザ・シグナル2 */
signal( SIGTERM, rcvend ); /* 終了シグナル */
signal( SIGBUS, rcvend ); /* バスエラー */
signal( SIGQUIT, rcvend ); /* 中止 */
signal( SIGHUP, rcvend ); /* ハングアップ */
signal( SIGINT, rcvend ); /* 割込み */
signal( SIGSEGV, rcvend ); /* セグメントエラー */
rcbp = &rcb; /* rcbアドレス設定 */
memset( rcbp, 0, sizeof(struct lu0rb) ); /* rcb域クリア */
/*=============================================*/
/* lu0open マクロ処理 */
/* <<< アプリ登録 >>> */
/*=============================================*/
strcpy( rcbp->l_unit, "lu02" ); /* LU名設定 */
if( lu0open( rcbp ) != NORMAL ) /* lu0open正常? */
{ /* */
printf( "lu0open NG %d \n", rcbp->l_cplt);
return; /* no -> < 異常終了 > */
} /* */
printf( "lu0open OK %d \n", rcbp->l_cplt);
/*=============================================*/
/* lu0getbマクロ処理 */
/* <<< 送信バッファ獲得 >>> */
/*=============================================*/
rcbp->l_bfsiz = 12288; /* 獲得サイズ設定 (12K) */
if( lu0getb( rcbp ) != NORMAL ) /* lu0getb正常? */
{ /* */
procend( rcbp ); /* no ---> 終了処理 */
return; /* < 異常終了 > */
} /* */
wbufp = rcbp->l_bufadr; /* バッファアドレス退避 */
printf( "lu0getb OK %d \n", rcbp->l_cplt);
/*=============================================*/
/* lu0getbマクロ処理 */
/* <<< 受信バッファ獲得 >>> */
/*=============================================*/
rcbp->l_bfsiz = 12288; /* 獲得サイズ設定 (12K) */
if( lu0getb( rcbp ) != NORMAL ) /* lu0getb正常? */
{ /* */
procend( rcbp ); /* no ---> 終了処理 */
return; /* < 異常終了 > */
} /* */
rbufp = rcbp->l_bufadr; /* バッファアドレス退避 */
printf( "lu0getb OK %d \n", rcbp->l_cplt);
/*=============================================*/
/* lu0cnctマクロ処理 */
/* <<< セション確立 >>> */
/*=============================================*/
rcbp->l_mode = LU0CACC; /* ホスト主導型 */
rcbp->l_rbfp = rbufp; /* 受信バッファアドレス */
rcbp->l_amode = CTLCD; /* 送信権獲得制御あり */
rcbp->l_time = 60; /* タイマ60秒 */
rcbp->l_cmd1 = SSCPNTC; /* SSCPデータ通知有 */
rcbp->l_cmd2 = RESPRQT1; /* タイプ1応答要求 */
rcbp->l_aplmx = 12288; /* 最大利用者データ長12K*/
printf( "lu0cnct start \n");
if( lu0cnct( rcbp ) != NORMAL ) /* lu0cnct正常? */
{ /* */
printf( "lu0cnct NG %d \n", rcbp->l_cplt,rcbp->l_errdtl);
procend( rcbp ); /* no ---> 終了処理 */
return; /* < 異常終了 > */
} /* */
printf( "lu0cnct OK %d \n", rcbp->l_cplt);
/*=============================================*/
/* lu0checkマクロ処理 */
/* <<< 受信状態の問い合わせ >>> */
/*=============================================*/
if( lu0check( rcbp ) != NORMAL ) /* lu0check正常? */
{ /* */
printf( "lu0chek NG %d \n", rcbp->l_cplt,rcbp->l_errdtl);
procend( rcbp ); /* no ---> 終了処理 */
return; /* < 異常終了 > */
} /* */
rcbp->l_time = 60; /* タイマ値設定 */
if( rcbp->l_cplt == ELU0RCV ) /* 受信データあり ? */
{ /* */
rcbp->l_time = 0; /* yes -> タイマ値再設定*/
} /* */
printf( "lu0chek OK %d \n", rcbp->l_cplt,rcbp->l_errdtl);
/*=============================================*/
/* lu0readマクロ処理 */
/* <<< データ受信 >>> */
/*=============================================*/
rcbp->l_rbfp = rbufp; /* */
if( lu0read( rcbp ) != NORMAL ) /* lu0read 正常? */
{ /* */
printf( "lu0read NG %d \n", rcbp->l_cplt,rcbp->l_errdtl);
procend( rcbp ); /* no ---> 終了処理 */
return; /* < 異常終了 > */
} /* */
printf( "lu0read OK %d \n", rcbp->l_cplt,rcbp->l_errdtl);
/*=============================================*/
/* lu0writeマクロ処理 */
/* <<< データ送信 >>> */
/*=============================================*/
rcbp->l_wcmd = L_DATA; /* データ送信指定 */
rcbp->l_wrmd1 = CD; /* 送信権獲得制御あり */
rcbp->l_wlng = 512; /* 送信データ長設定 */
rcbp->l_wbfp = wbufp; /* */
for( dc = 0 ; dc < 512 ; dc++, wbufp++) /* A */
{ /* | 送信データ設定 */
*wbufp = dc; /* V */
} /* */
if( lu0write( rcbp ) != NORMAL ) /* lu0write正常? */
{ /* */
procend( rcbp ); /* no ---> 終了処理 */
return; /* < 異常終了 > */
} /* */
/*=============================================*/
/* lu0discマクロ処理 */
/* <<< セション解放 >>> */
/*=============================================*/
if( lu0disc( rcbp ) != NORMAL ) /* lu0disc 正常? */
{ /* */
procend( rcbp ); /* no ---> 終了処理 */
return; /* < 異常終了 > */
} /* */
/*=============================================*/
/* lu0frebマクロ処理 */
/* <<< 送信バッファ解放 >>> */
/*=============================================*/
rcbp->l_bufadr = wbufp; /*
lu0freb( rcbp ); /* lu0freb発行 */
/*=============================================*/
/* lu0frebマクロ処理 */
/* <<< 受信バッファ解放 >>> */
/*=============================================*/
rcbp->l_bufadr = rbufp; /*
lu0freb( rcbp ); /* lu0freb発行 */
/*=============================================*/
/* lu0closeマクロ処理 */
/* <<< アプリ登録抹消 >>> */
/*=============================================*/
lu0close( rcbp ); /* lu0close発行 */
/* */
return; /* < 正常終了 > */
} /* */
/*====================================================================*
* function name : (2) procend *
* function : プロセス終了処理 *
*====================================================================*/
void
procend( rcbp )
struct lu0rb *rcbp;
{ /* */
/*=============================================*/
/* lu0closeマクロ処理 */
/* <<< アプリ登録抹消 >>> */
/*=============================================*/
printf( "macro %x NG %d \n", rcbp->l_cplt , rcbp->l_mcode);
lu0close( rcbp ); /* lu0close発行 */
/* */
return; /* */
} /* */
All Rights Reserved, Copyright (C) 富士通株式会社 2002