ライブラリーの使用例題
使用例題として,次のサンプルプログラムを示します。
/**********************************************************/
/* 同期型サンプルプログラム */
/**********************************************************/
#include <stdio.h>
#include "ztc.h"
void main()
{
struct ztc_tran_label_t test_label[2];
int errcode[2];
int rtn;
strcpy(test_label[0].label, "sendfile1");
strcpy(test_label[1].label, "sendfile2");
rtn = ZTC_Syn_trans("remotehost1", NULL, test_label, NULL, 2, errcode);
if(rtn == ZTC_SUCCESS) {
printf("sendfile1とsendfile2は正常に伝送できました。¥n");
} else {
printf("sendfile1とsendfile2の伝送中にエラーが発生しました。¥n");
printf("rtn = %d errcode[0] = %d errcode[1] = %d ¥n", rtn,
errcode[0], errcode[1]);
}
}
/**********************************************************/
/* 非同期型サンプルプログラム */
/**********************************************************/
#include <errno.h>
#include <stdio.h>
#include <sys/time.h>
#include "ztc.h"
fd_set readfds;
fd_set writefds;
void main()
{
/* 変数定義 */
int multin;
int filen; /* ファイル多重度(MAX64) */
int fdv[200]; /* 非同期伝送ディスクリプター格納領域 */
struct ztc_tran_label_t file_labels[64]; /* ファイルラベル名配列 */
struct timeval timeoutx; /* 監視タイマー */
int rc1,rc2,rc3,rc4; /* 関数戻り値 */
int errcode[64]; /* 伝送結果コード */
int i,j,k;
int cnt1,cnt2,flag1;
/* 変数初期化 */
multin = 2;
filen = 1;
for(i=0;i < multin;i++){
fdv[i] = -1;
}
sprintf(file_labels[0].label, "sendfile1");
sprintf(file_labels[1].label, "sendfile2");
/* 伝送要求の登録 */
for(i=0;i < multin;i++){
rc2 = 0;
rc2 = ZTC_Asyn_trans("remotehost1", /* 相手局ラベル名 */
NULL, /* 相手局情報定義一部変更情報 */
&file_labels[i], /* ファイルラベル名配列 */
NULL, /* ファイル情報定義一部変更情報 */
filen, /* 要求伝送ファイル数 */
&fdv[i]); /* 非同期伝送ディスクリプター配列*/
if (rc2 != ZTC_SUCCESS) {
printf("ZTC_Asyn_trans 関数エラー cnt = %d, rc = %d¥n", i, rc2);
fdv[i] = -1;
}
}
timeoutx.tv_sec=2;
timeoutx.tv_usec=0;
rc3 = 0;
while(rc3 < 1){
cnt1 = 0;
printf("select");
/* 監視対象のセット */
FD_ZERO(&readfds);
FD_ZERO(&writefds);
for(i=0;i < multin;i++){
if(fdv[i] != -1){
FD_SET(fdv[i], &readfds);
FD_SET(fdv[i], &writefds);
printf("%02d", fdv[i]);
cntl++;
}
}
if(cnt1 == 0){
printf("end.¥nRequest completed.¥n");
break; /* exit */
}
printf("¥n"); fflush(stdout);
/* 事象の完了待ち */
rc3 = select(multin+4, &readfds, &writefds, 0, &timeoutx);
printf("rc=%d¥n",rc3);
if(rc3 == 0){
printf("no event (select timeout)¥n");
}else if(rc3 < -1){
printf("select error errno=%d¥n", errno);
break; /* exit */
}else{
cnt2 = rc3; /* 発生事象数 */
for (k=0;k < cnt2;k++) for(i=0; < multin;i++){
if(fdv[i] == -1) continue;
flag1 = 0;
if(FD_ISSET(fdv[i], &readfds) != 0){
printf("read %02d.",fdv[i]);
FD_CLR(fdv[i], &readfds);
flag1 = 1;
}else if(FD_ISSET(fdv[i], &writefds) != 0){
printf("write %02d.",fdv[i]);
FD_CLR(fdv[i], &writefds);
flag1 = 1;
}
if(flag1 == 0) continue;
/* 伝送終了確認 */
rc4 = ZTC_Even(fdv[i], errcode);
if(rc4 != ZTC_SUCCESS){
printf("ZTC_Even 関数 エラー rc=%d¥n", rc4);
}else{
printf("ZTC_Even");
for(j=0;j < filen;j++); {
printf("%02d.", errcode[j]);
}
printf("¥n"); fflush(stdout);
}
fdv[i] = -1;
break;
}
rc3 = 0;
}
}
}
/**********************************************************/
/* 伝送情報定義一部変更機能サンプルプログラム */
/**********************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "ztc.h"
void main()
{
struct ztc_tran_label_t test_label[2];
int errcode[2];
int rtn;
struct change_host_define_t host_define;
struct change_file_define_t file_define;
/* 構造体の初期化 */
memset(&host_define, '¥0', sizeof(host_define));
memset(&file_define, '¥0', sizeof(file_define));
/* 相手局情報定義の変更を指示する */
strcpy(host_define.exec, "/users/JP1ZTC/TEST/test_suite/uap/h_pro1");
host_define.exec_opt[0] = ZTC_RRTN;
host_define.exec_opt[1] = ZTC_REQNO;
host_define.exec_opt[2] = 0;
strcpy(host_define.remote_code, "0x12345678902222");
strcpy(host_define.open_req_pass, "ABCDEF");
strcpy(host_define.ipaddr, "200.0.0.1");
host_define.text_ack_cnt = 7;
host_define.changeflg = ZTC_CHANGE_HOST_DEF_EXEC
| ZTC_CHANGE_HOST_DEF_EXEC_OPT
| ZTC_CHANGE_HOST_DEF_REMOTE_CODE
| ZTC_CHANGE_HOST_DEF_OPEN_REQ_PASS
| ZTC_CHANGE_HOST_DEF_IPADDR
| ZTC_CHANGE_HOST_DEF_TEXT_ACK_CNT;
/* ファイル情報定義の変更を指示する */
file_define.exec_opt[0] = ZTC_RRTN;
file_define.exec_opt[1] = ZTC_REQNO;
file_define.exec_opt[2] = 0;
strcpy(file_define.real_file_name, "/users/JP1ZTC/TEST/test_suite/DATA/sendfile1.txt");
strcpy(file_define.trans_file_name, "502000010101");
file_define.changeflg = ZTC_CHANGE_FILE_DEF_EXEC_OPT
| ZTC_CHANGE_FILE_DEF_REAL_FILE_NAME
| ZTC_CHANGE_FILE_DEF_TRANS_FILE_NAME;
strcpy(test_label[0].label, "sendfile1");
rtn = ZTC_Syn_trans("remotehost1", &host_define, test_label,
&file_define, 1, errcode);
if(rtn == ZTC_SUCCESS){
printf("sendfile1は正常に伝送できました。¥n");
}else{
printf("sendfile1の伝送中にエラーが発生しました。¥n");
printf("rtn = %d errcode[0] = %d errcode[1] = %d ¥n", rtn,
errcode[0], errcode[1]);
}
}