ライブラリーの使用例題
-
同期型の伝送要求を登録するサンプルプログラム
-
非同期型の伝送要求を登録するサンプルプログラム
-
同期型で相手局情報とファイル情報の定義内容を一部変更して伝送要求を登録するサンプルプログラム
-
同期型サンプルプログラム
このプログラムは,相手局ラベルremotehost1に対してファイルラベルsendfile1とファイルラベルsendfile2を伝送するための伝送要求を同期型で登録するサンプルプログラムです。
/**********************************************************/ /* 同期型サンプルプログラム */ /**********************************************************/ #include <stdio.h> #include <string.h> #include "ztc.h" int main() { struct ztc_tran_reqdata_t reqdata; struct ztc_tran_rtndata_t rtndata; struct ztc_tran_label_t test_label[2]; int errcode[2]; int errcode_detail[2]; int rtn; reqdata.aite_label="remotehost1"; strcpy(test_label[0].label, "sendfile1"); strcpy(test_label[1].label, "sendfile2"); reqdata.file_labels=test_label; reqdata.host_define=NULL; reqdata.file_define=NULL; reqdata.count=2; rtndata.errcode=errcode; rtndata.errcode_detail=errcode_detail; rtn=ZTC_Syn_trans_Ex(&reqdata,&rtndata); if(rtn == ZTC_SUCCESS) { printf("sendfile1とsendfile2は正常に伝送できました。\n"); } else { printf("sendfile1とsendfile2の伝送中にエラーが発生しました。\n"); printf("rtn=%d rtn_detail=%04x \n",rtn,rtndata.rtn_detail); printf("errcode[0]=%d errcode_detail[0]=%04x ", rtndata.errcode[0],rtndata.errcode_detail[0]); printf("errcode[1]=%d errcode_detail[1]=%04x \n", rtndata.errcode[1],rtndata.errcode_detail[1]); } }
-
非同期型サンプルプログラム
このプログラムは,相手局ラベルremotehost1に対してファイルラベルsendfile1とファイルラベルsendfile2を伝送するための伝送要求を非同期型で登録するサンプルプログラムです。
/**********************************************************/ /* 非同期型サンプルプログラム */ /**********************************************************/ #include <errno.h> #include <stdio.h> #include <sys/time.h> #include <string.h> #include "ztc.h" fd_set readfds; fd_set writefds; int main() { /* 変数定義 */ int multin; int filen; int fdv[200]; /* 非同期伝送ディスクリプター格納領域 */ struct ztc_tran_reqdata_t reqdata; struct ztc_tran_rtndata_t rtndata; struct ztc_tran_label_t file_labels[64]; /* ファイルラベル名配列 */ struct timeval timeoutx; /* 監視タイマー */ int rc1,rc2,rc3,rc4; /* 関数戻り値 */ int errcode[64]; /* 伝送結果コード */ int errcode_detail[64]; int i,j,k; int cnt1,cnt2,flag1; /* 変数初期化 */ multin = 2; filen = 1; for(i=0;i < multin;i++){ fdv[i] = -1; } rtndata.errcode=errcode; rtndata.errcode_detail=errcode_detail; sprintf(file_labels[0].label, "sendfile1"); sprintf(file_labels[1].label, "sendfile2"); /* 伝送要求の登録 */ for(i=0;i < multin;i++){ reqdata.aite_label="remotehost1"; reqdata.file_labels=file_labels; reqdata.host_define=NULL; reqdata.file_define=NULL; reqdata.count=filen; rc2 = 0; rc2 = ZTC_Asyn_trans_Ex(&reqdata,&fdv[i]); if (rc2 != ZTC_SUCCESS) { printf("ZTC_Asyn_trans_Ex 関数エラー 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]); cnt1++; } } 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;i < 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_Ex(fdv[i],&rtndata); if(rc4 != ZTC_SUCCESS){ printf("ZTC_Even_Ex 関数 エラー rc=%d\n", rc4); printf("rtn_detail=%04x.",rtndata.rtn_detail); for(j=0;j < filen;j++) { printf("errcode=%02d.",rtndata.errcode[j]); printf("errcode_detail=%04x.\n",rtndata.errcode_detail[j]); } }else{ printf("ZTC_Even_Ex"); for(j=0;j < filen;j++) { printf("%02d.", rtndata.errcode[j]); } printf("\n"); fflush(stdout); } fdv[i] = -1; break; } rc3 = 0; } } }
-
伝送情報定義一部変更機能サンプルプログラム
このプログラムは,相手局ラベルremotehost1の相手局情報,およびファイルラベルsendfile1のファイル情報の定義内容を一部変更して,同期型の伝送要求を登録するサンプルプログラムです。
/**********************************************************/ /* 伝送情報定義一部変更機能サンプルプログラム */ /**********************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "ztc.h" int main() { struct ztc_tran_label_t test_label[2]; int errcode[2]; int errcode_detail[2]; int rtn; struct change_host_define_t host_define; struct change_file_define_t file_define; struct ztc_tran_reqdata_t reqdata; struct ztc_tran_rtndata_t rtndata; /* 構造体の初期化 */ 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"); reqdata.file_labels=test_label; reqdata.aite_label="remotehost1"; reqdata.host_define=&host_define; reqdata.file_define=&file_define; reqdata.count=1; rtndata.errcode=errcode; rtndata.errcode_detail=errcode_detail; rtn=ZTC_Syn_trans_Ex(&reqdata,&rtndata); if(rtn == ZTC_SUCCESS){ printf("sendfile1は正常に伝送できました。\n"); }else{ printf("rtn = %d rtn_detail = %04x ", rtn,rtndata.rtn_detail); printf("errcode[0] = %d errcode_detail[0] = %04x \n", rtndata.errcode[0], rtndata.errcode_detail[0]); } }