Linkexpress 利用者プログラム開発ガイド
目次 索引 前ページ次ページ

付録A サンプル> A.1 転送APIのサンプル

A.1.7 応答側ファイル受信の例

このサンプルプログラムは、以下のファイルに格納されています。

PCサーバ : インストールディレクトリ\sample\api\respapl1.c

UNIXサーバ : インストールディレクトリ/SAMPLE/api/respapl1.c

機能

このサンプルプログラムは、相手システムからのファイル転送要求に対する応答を行うものです。プログラムの説明を以下に示します。

1つ目のGETINFでファイル転送の開始通知を受け取り、その内容に対する応答をFTRNRSPで返しています。このサンプルプログラムの場合は、指定された内容で応答しています。

2つ目のGETINFでファイル転送の完了通知を受け取り、TRANCOMPでその旨をLinkexpressに通知しています。

ソースコード

respapl1.cの内容を以下に示します。

/*
 *
 * All Rights Reserved Copyright (c) FUJITSU LIMITED 1997-2005
 *
 */

/*
 *      API sample program (resp)
 */

/*
 *      include file
 */
#include        <sys/types.h>
#include        <string.h>
#include        <stdio.h>
#include        <fcntl.h>
#include        <lxapi.h> 

int
main()
{
unsigned long  req_ident;
FILE           *ofp;
    
    /*
     * getinf
     */
    {
    dts_getinf_dcb_t       input_dcb;
    dts_get_information_t  output_dcb;

        /*
         *    clear parameters
         */
        memset( &input_dcb, 0, sizeof(dts_getinf_dcb_t) );
        memset( &output_dcb, 0, sizeof(dts_get_information_t) );

        input_dcb.appl_name = "@_USRAPL";
        input_dcb.req_kind = DTS_API_RESP;
        input_dcb.info_kind = DTS_API_START_INFO;
        input_dcb.timer = 0;
        input_dcb.path_name = 0;

        getinf( &input_dcb, &output_dcb );

        req_ident = output_dcb.getinf_data.tstart.req_ident;
        ofp = fopen("C:\\test\\api\\resp1.txt", "a");
        (void)fprintf(ofp, "getinf\n");
        (void)fprintf(ofp, "req_ident = %d\n", req_ident);
        (void)fprintf(ofp, "service_kind = %d\n", output_dcb.service_kind);
        (void)fprintf(ofp, "system_name = %s\n",
                output_dcb.getinf_data.tstart.system_name);
        (void)fprintf(ofp, "path_name = %s\n",
                output_dcb.getinf_data.tstart.path_name);
        (void)fprintf(ofp, "flow_kind = %d\n", 
                output_dcb.getinf_data.tstart.flow_kind);
        (void)fprintf(ofp, "file_name = %s\n",
                output_dcb.getinf_data.tstart.file_name);
        (void)fprintf(ofp, "strage_form =%d\n",
                output_dcb.getinf_data.tstart.storage_form);
        (void)fprintf(ofp, "data_type = %d\n", 
                output_dcb.getinf_data.tstart.data_type);
        (void)fprintf(ofp, "file_attr format = %d\n", 
                output_dcb.getinf_data.tstart.file_attr.rec_format);
        (void)fprintf(ofp, "file_attr len = %d\n", 
                output_dcb.getinf_data.tstart.file_attr.rec_len);
        (void)fprintf(ofp, "\n");
        (void)fflush(ofp);
        (void)fclose(ofp);
    }

    /*
     *    ftrnrsp
     */
    {
    dts_ftrnrsp_dcb_t  input_dcb;
    dts_diagnostic_t   output_dcb;

        /*
         *    clear parameters
         */
        memset( &input_dcb, 0, sizeof(dts_ftrnrsp_dcb_t) );
        memset( &output_dcb, 0, sizeof(dts_diagnostic_t) );

        input_dcb.req_ident = req_ident;
        input_dcb.appl_name = "@_USRAPL";
        input_dcb.attest_code = DTS_API_OK;
        input_dcb.error_detail = 0;
        input_dcb.local_user = 0;
        input_dcb.file_name = 0;
        input_dcb.file_attr = 0;
        input_dcb.data_type = 0;
        input_dcb.speed = 0;
        input_dcb.ret_tid = 0;

        ftrnrsp( &input_dcb, &output_dcb );
    }

    /*
     *    getinf
     */
    {
    dts_getinf_dcb_t       input_dcb;
    dts_get_information_t  output_dcb;

        /*
         *    clear parameters
         */
        memset( &input_dcb, 0, sizeof(dts_getinf_dcb_t) );
        memset( &output_dcb, 0, sizeof(dts_get_information_t) );

        input_dcb.appl_name = "@_USRAPL";
        input_dcb.req_kind = DTS_API_RESP;
        input_dcb.info_kind = DTS_API_END_INFO;
        input_dcb.timer = 0;
        input_dcb.path_name = 0;

        getinf( &input_dcb, &output_dcb );
        req_ident = output_dcb.getinf_data.tcomp.req_ident;
    }


    /*
     *    trancomp
     */
    {
    dts_trancomp_dcb_t  input_dcb;
    dts_diagnostic_t    output_dcb;

        /*
         *    clear parameters
         */
        memset( &input_dcb, 0, sizeof(dts_trancomp_dcb_t) );
        memset( &output_dcb, 0, sizeof(dts_diagnostic_t) );

        input_dcb.req_ident = req_ident;
        input_dcb.appl_name = "@_USRAPL";
        input_dcb.req_kind = DTS_API_RESP;
        input_dcb.appl_cont = DTS_API_APLCUT;

        trancomp( &input_dcb, &output_dcb );

    }

    return( 1 );

}

参照

lxapi.hdts_getinf_dcb_tdts_get_information_tdts_ftrnrsp_dcb_tdts_trancomp_dcb_tdts_diagnostic_t

用語解説

DTS_API_RESP
転送監視機能を使用するため、DTS_API_RESP(転送監視機能)を指定します。
DTS_API_START_INFO
開始情報を受信するため、DTS_API_START_INFO(開始情報)を指定します。
DTS_API_OK
サービスを継続するため、DTS_API_OK(転送処理実行)を指定します。
DTS_API_END_INFO
終了情報を受信するため、DTS_API_END_INFO(終了情報)を指定します。
DTS_API_APLCUT
次にサービスがないため、DTS_API_APLCUT(切断)を指定します。

 


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 1997-2007