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

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

A.1.8 応答側連続ファイル受信の例

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

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

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

機能

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

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

2つ目のGETINFでファイル転送の完了通知を受け取り、TRANCOMPでその旨をLinkexpressに通知しています。また、このTRANCOMPにより、続くファイル転送要求を同一のプログラムが継続して受け取ることを通知しています。

3つ目のGETINFとそれに続くFTRNRSPは、1つ目のGETINFとそれに続くFTRNRSPと同様のことを行っています。

4つ目のGETINFは、2つ目のGETINFと同様の処理を行っています。ただし、それに続くTRANCOMPでは、完了通知を受け取ったことをLinkexpressに通知すると同時に、続くファイル転送要求は同一のプログラムでは受け取らないことを通知しています。

ソースコード

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

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

/*
 *      API sample program (resp no.2)
 */

/*
 *      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;
    }

    /*
     *    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;

        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.tcomp.system_name);
        (void)fprintf(ofp, "path_name = %s\n", 
            output_dcb.getinf_data.tcomp.path_name);
        (void)fprintf(ofp, "flow_kind = %d\n", 
            output_dcb.getinf_data.tcomp.flow_kind);
        (void)fprintf(ofp, "start_time = %s", 
            ctime( (time_t *)&output_dcb.getinf_data.tcomp.start_time ) );
        (void)fprintf(ofp, "comp_time = %s", 
            ctime( (time_t *)&output_dcb.getinf_data.tcomp.comp_time ) );
        (void)fprintf(ofp, "data_size = %d\n", 
            output_dcb.getinf_data.tcomp.data_size);
        (void)fprintf(ofp, "comp_type = %d\n", 
            output_dcb.getinf_data.tcomp.trn_comptype);
        (void)fprintf(ofp, "\n");
        (void)fflush(ofp);
        (void)fclose(ofp);
    }


    /*
     *    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_APLCONT;

        trancomp( &input_dcb, &output_dcb );

    }

    /*
     *    getinf2
     */
    {
    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;
    }

    /*
     *    ftrnrsp2
     */
    {
    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 );
    }


    /*
     *    getinf2
     */
    {
    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;
    }


    /*
     *    trancomp2
     */
    {
    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_APLCONT;

        trancomp( &input_dcb, &output_dcb );

    }

return( 1 );

}

参照

lxapi.hdts_getinf_dcb_tdts_get_information_tdts_ftrnrsp_dcb_tdts_diagnostic_tdts_trancomp_dcb_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_APLCONT
次のサービスを同一の応用プログラムで受信するため、DTS_API_APLCONT(継続)を指定します。

 


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

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