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

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

A.1.3 起動側連続ファイル送信(突き放し型)の例

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

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

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

機能

このサンプルプログラムは、突き放し型のSNDFILEを使用してファイル転送を連続して行うものです。プログラムの説明を以下に示します。

Linkexpressに対してSNDFILEの要求を連続して行います。突き放し型で要求しているため、GETINFでファイル転送の完了通知を受け取っています。また、GETINFで完了通知を受け取ったため、TRANCOMPでその旨をLinkexpressに通知しています。

ファイル転送を連続して行うため、上記の一連の処理を再度行っています。

ソースコード

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

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

/*
 *      API sample program  (init No.3) 
 */

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

int
main()
{
unsigned long   req_ident;

    /*
     * sndfile
    */
    {
    dts_sndfile_dcb_t        input_dcb;
    dts_inf_transfer_comp_t  output_dcb;
    password_t  password;

        /*
         *    clear parameters
         */
        memset( &input_dcb, 0, sizeof(dts_sndfile_dcb_t) );
        memset( &output_dcb, 0, sizeof(dts_inf_transfer_comp_t) );
        memset( &password, 0, sizeof(password_t) );

        input_dcb.req_ident = 0;
        input_dcb.req_type = DTS_API_THROW;
        input_dcb.appl_name = "@_USRAPL";
        input_dcb.system_name = "dest_system";
        input_dcb.assoc_cont = DTS_API_CONT;
        input_dcb.local_filename = "C:\\test\\api\\a";
        input_dcb.local_user = 0;
        input_dcb.remote_filename = "C:\\test\\api\\b";
        input_dcb.storage_form = DTS_API_REP;
        input_dcb.access_password = 0;
        input_dcb.data_type = DTS_API_BINARY;
        input_dcb.file_attr = 0;
        input_dcb.speed = 0;
        input_dcb.ret_tid = 0;
        input_dcb.protocol_option = 0;
        input_dcb.user_id = "linkexp";
        input_dcb.password = &password;
        password.password_len = 7;
        strcpy( password.password, "linkexp" );
        input_dcb.group = 0;

        sndfile( &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_INIT;
        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;
        printf("req_ident =%d\n", req_ident );
        printf("system_name =%s\n", output_dcb.getinf_data.tcomp.system_name );
        printf("flow_kind =%d\n", output_dcb.getinf_data.tcomp.flow_kind );
        printf("start_time =%s", 
            ctime( (time_t *)&output_dcb.getinf_data.tcomp.start_time ) );
        printf("comp_time =%s", 
            ctime( (time_t *)&output_dcb.getinf_data.tcomp.comp_time ) );
        printf("trn_comptype =%d\n", output_dcb.getinf_data.tcomp.trn_comptype );
        printf("data_size =%d\n", output_dcb.getinf_data.tcomp.data_size );
        }

    /*
     *    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) );
        memset( &password, 0, sizeof(password_t) );

        input_dcb.appl_name = "@_USRAPL";
        input_dcb.req_ident = req_ident;
        input_dcb.req_kind = DTS_API_INIT;

        trancomp( &input_dcb, &output_dcb );

    }

    /*
     *    sndfile
     */
    {
    dts_sndfile_dcb_t        input_dcb;
    dts_inf_transfer_comp_t  output_dcb;
    password_t  password;

        /*

         *    clear parameters
         */
        memset( &input_dcb, 0, sizeof(dts_sndfile_dcb_t) );
        memset( &output_dcb, 0, sizeof(dts_inf_transfer_comp_t) );

        input_dcb.req_ident = 0;
        input_dcb.req_type = DTS_API_THROW;
        input_dcb.appl_name = "@_USRAPL";
        input_dcb.system_name = "dest_system";
        input_dcb.assoc_cont = DTS_API_CUT;
        input_dcb.local_filename = "C:\\test\\api\\a";
        input_dcb.local_user = 0;
        input_dcb.remote_filename = "C:\\test\\api\\b";
        input_dcb.storage_form = DTS_API_REP;
        input_dcb.access_password = 0;
        input_dcb.data_type = DTS_API_BINARY;
        input_dcb.file_attr = 0;
        input_dcb.speed = 0;
        input_dcb.ret_tid = 0;
        input_dcb.protocol_option = 0;
        input_dcb.user_id = "linkexp";
        input_dcb.password = &password;
        password.password_len = 7;
        strcpy( password.password, "linkexp" );
        input_dcb.group = 0;

        sndfile( &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_INIT;
        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;
        printf("req_ident =%d\n", req_ident );
        printf("system_name =%s\n", output_dcb.getinf_data.tcomp.system_name );
        printf("flow_kind =%d\n", output_dcb.getinf_data.tcomp.flow_kind );
        printf("start_time =%s", 
            ctime( (time_t *)&output_dcb.getinf_data.tcomp.start_time ) );
        printf("comp_time =%s", 
            ctime( (time_t *)&output_dcb.getinf_data.tcomp.comp_time ) );
        printf("trn_comptype =%d\n", output_dcb.getinf_data.tcomp.trn_comptype );
        printf("data_size =%d\n", output_dcb.getinf_data.tcomp.data_size );
    }

    /*
     *    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.appl_name = "@_USRAPL";
        input_dcb.req_ident = req_ident;
        input_dcb.req_kind = DTS_API_INIT;

        trancomp( &input_dcb, &output_dcb );
    }

    return( 0 );

}

参照

lxapi.hdts_sndfile_dcb_tdts_inf_transfer_comp_tdts_getinf_dcb_tdts_get_information_tdts_trancomp_dcb_tdts_diagnostic_t

用語解説

DTS_API_THROW
突き放し型で要求するため、DTS_API_THROW(突き放し型)を指定します。
DTS_API_CONT
コネクションを継続するため、DTS_API_CONT(継続)を指定します。
DTS_API_REP
仮想ファイルの先頭から格納するため、DTS_API_REP(ファイル置換え)を指定します。
DTS_API_BINARY
バイナリデータを転送するため、DTS_API_BINARY(バイナリ)を指定します。
DTS_API_INIT
一般機能を使用するため、DTS_API_INIT(一般機能)を指定します。
DTS_API_END_INFO
終了情報を受信するため、DTS_API_END_INFO(終了情報)を指定します。
DTS_API_CUT
コネクションを切断するため、DTS_API_CUT(切断)を指定します。

 


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

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