FileIO 사용예제

본 장에서는 데이터베이스에서 데이터를 읽어 파일에 저장하는 경우와 파일에서 데이터를 읽어 데이터베이스로 저장하는 경우로 나누어 FileIO를 사용하는 예를 설명한다.

1. 데이터베이스 파일 유형

figureA 1
데이터베이스 파일 유형의 FileIO 사용 예

데이터베이스 파일 유형의 FileIO 사용 예에 대한 소스 코드는 다음과 같다.

static long innerModule1(test2Context *context)
{
    long rc = RC_NRM;
    /* File Discripter */
    FILE *fd1=NULL;

    // User Variables Declaration

    {
        /**************************************
①       * KIND     : DBIO Call
         * NODE ID  : 2
         * NAME     : pfm_emp_p_s999
         * DESCRIPTION :
         *************************************/
        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:DBIO_DYNAMIC_PARAMETER NODEID2------------------//
        // TODO Auto-generated method stub
        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:DBIO_DYNAMIC_PARAMETER NODEID2------------------//

        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:BEFORE_CODE NODEID2------------------//
        // TODO Auto-generated method stub
        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:BEFORE_CODE NODEID2------------------//

        /**************************************
         *   KIND              : DBIO Callee Info
         *   NAME              : pfm_emp_p_s999
         *   EXEC              : SELECT
         *   INPUT             : pfm_emp_p_s999In
         *   OUTPUT            : pfm_emp_p_s999Out
         *   ARRAY INPUT       : NONE
         *   ARRAY OUTPUT      : pfm_emp_p_s999BundleOut
         *   DYNAMIC STRUCTURE : NONE
         *************************************/
        PFM_TRY(pfmDbioSelectArray("pfm_emp_p_s999", 3, &context->inCtxpfm_emp_p_s999, context->outCtxpfm_emp_p_s999Ary, NULL, PFMDBIO_NOLOCK));
        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:DBIO_EXCEPTION NODEID2------------------//

        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:DBIO_EXCEPTION NODEID2------------------//

        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:AFTER_CODE NODEID2------------------//
        // TODO Auto-generated method stub
        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:AFTER_CODE NODEID2------------------//

    }
    {
        /**************************************
         * KIND     : FILEIO Call
         * NODE ID  : 1
         * NAME     : fio TEST01
         * DESCRIPTION :
         *************************************/
②      PFM_TRYNJ(pfmFileIOOpen(&fd1, "/tmp/FileIOData.txt", NULL, FILE_WRITE));
        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:FILEIO_OPEN_EXCEPTION NODEID1------------------//

        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:FILEIO_OPEN_EXCEPTION NODEID1------------------//

        fioTEST01Data temporaryInput1[3];

        /* File IO Struct Define */
        PfmFileIOStruct pfmFileIOStruct1 = {"fioTEST01Data", 3, "F", 0, NULL, 0, NULL };

        bzero(temporaryInput1, sizeof(temporaryInput1));

        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:BEFORE_CODE NODEID1------------------//

        /*******************************************
③       *              File IO  입력값 세팅       *
         *******************************************/
        pfmFileIOStruct1[0].empno = context->outCtxpfm_emp_p_s999Ary[0]->empno ;
        PFM_STRCPY( pfmFileIOStruct1[0].ename, context->outCtxpfm_emp_p_s999Ary[0]->ename );
        PFM_STRCPY( pfmFileIOStruct1[0].job, context->outCtxpfm_emp_p_s999Ary[0]->job );
        PFM_STRCPY( pfmFileIOStruct1[0].sal, context->outCtxpfm_emp_p_s999Ary[0]->sal );

        pfmFileIOStruct1[1].empno = context->outCtxpfm_emp_p_s999Ary[1]->empno ;
        PFM_STRCPY( pfmFileIOStruct1[1].ename, context->outCtxpfm_emp_p_s999Ary[1]->ename );
        PFM_STRCPY( pfmFileIOStruct1[1].job, context->outCtxpfm_emp_p_s999Ary[1]->job );
        PFM_STRCPY( pfmFileIOStruct1[1].sal, context->outCtxpfm_emp_p_s999Ary[1]->sal );

        pfmFileIOStruct1[2].empno = context->outCtxpfm_emp_p_s999Ary[2]->empno ;
        PFM_STRCPY( pfmFileIOStruct1[2].ename, context->outCtxpfm_emp_p_s999Ary[2]->ename );
        PFM_STRCPY( pfmFileIOStruct1[2].job, context->outCtxpfm_emp_p_s999Ary[2]->job );
        PFM_STRCPY( pfmFileIOStruct1[2].sal, context->outCtxpfm_emp_p_s999Ary[2]->sal );

        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:BEFORE_CODE NODEID1------------------//

        /* Read Buffer Struct */
        pfmFileIOStruct1.structData = &temporaryInput1[0];
        pfmFileIOStruct1.structSize = sizeof(fioTEST01Data);

④      PFM_TRYNJ(pfmFileIOWrite(&fd1, &pfmFileIOStruct1));

        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:FILEIO_EXCEPTION NODEID1------------------//
        if( rc != RC_NRM ) {
            PFM_DBG("NULL File Write Error!");
            PFM_TRY( pfmFileIOClose( &fd1 ) );
            return RC_ERR;
        }
        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:FILEIO_EXCEPTION NODEID1------------------//

        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:AFTER_CODE NODEID1------------------//
        // TODO Auto-generated method stub
        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:AFTER_CODE NODEID1------------------//

        PFM_TRYNJ(pfmFileIOClose(&fd1));
        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:FILEIO_CLOSE_EXCEPTION NODEID1------------------//

        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:FILEIO_CLOSE_EXCEPTION NODEID1------------------//

    }
    return RC_NRM;

PFM_CATCH:
    return rc;
}

다음은 위 소스 내용 중 각 번호에 대한 설명이다.

① DBIO 모듈을 이용하여 데이터베이스에 접근하여 데이터를 읽는다.

figureA 1 1

② FileIO 모듈을 Open하여 FD(FileDescriptor)를 가져온다.

figureA 1 2

③ DBIO 모듈의 결과 값을 담고 있는 출력 구조체로 FileIO의 입력 구조체를 설정한다.

figureA 1 2

④ FileIO 구조체의 내용을 파일에 저장한다.

figureA 1 2

2. 파일 데이터베이스 유형

figureA 2
파일 데이터베이스 유형의 FileIO 사용 예

파일 데이터베이스 유형의 FileIO 사용 예에 대한 소스 코드는 다음과 같다.

static long innerModule1(test2Context *context)
{
    long rc = RC_NRM;
    /* File Discripter */
    FILE *fd1=NULL;

    // User Variables Declaration

    {
        /**************************************
         * KIND     : FILEIO Call
         * NODE ID  : 1
         * NAME     : fio TEST01
         * DESCRIPTION :
         *************************************/
①      PFM_TRYNJ(pfmFileIOOpen(&fd1, "/tmp/FileIOData.txt", NULL, FILE_READ));
        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:FILEIO_OPEN_EXCEPTION NODEID1------------------//
        if(rc!=RC_NRM) {
           PFM_DBG("[%s] File open Error!!", /tmp/FileIOData.txt);
           return RC_ERR;
         }
        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:FILEIO_OPEN_EXCEPTION NODEID1------------------//

        fioTEST01Data temporaryOutput1[3];

       /* File IO Struct Define */
       PfmFileIOStruct pfmFileIOStruct1 = {"fioTEST01Data", 3, "F", 0, NULL, 0, NULL };

       bzero(temporaryOutput1, sizeof(temporaryOutput1));

       //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:BEFORE_CODE NODEID1------------------//

       //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:BEFORE_CODE NODEID1------------------//

       /* Read Buffer Struct */
       pfmFileIOStruct1.structData = &temporaryOutput1[0];
       pfmFileIOStruct1.structSize = sizeof(fioTEST01Data);

       PFM_STRYNJ(pfmFileIORead(&fd1, &pfmFileIOStruct1));

       //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:FILEIO_EXCEPTION NODEID1------------------//
       if( rc != RC_NRM ) {
            PFM_DBG("NULL File Write Error!");
            PFM_TRY( pfmFileIOClose( &fd1 ) );
            return RC_ERR;
       }
       //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:FILEIO_EXCEPTION NODEID1------------------//

       //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:AFTER_CODE NODEID1------------------//

      /*******************************************
       *              DBIO  입력값 세팅          *
       *******************************************/
      context->inCtxpfm_emp_p_i999Ary[0].empno = pfmFileIOStruct1[0]->empno ;
      PFM_STRCPY( context->inCtxpfm_emp_p_i999Ary[0].ename, pfmFileIOStruct1[0]->ename );
      PFM_STRCPY( context->inCtxpfm_emp_p_i999Ary[0].sal, pfmFileIOStruct1[0]->sal );

      context->inCtxpfm_emp_p_i999Ary[1].empno = pfmFileIOStruct1[1]->empno ;
      PFM_STRCPY( context->inCtxpfm_emp_p_i999Ary[1].ename, pfmFileIOStruct1[1]->ename );
      PFM_STRCPY( context->inCtxpfm_emp_p_i999Ary[1].sal, pfmFileIOStruct1[1]->sal );

      context->inCtxpfm_emp_p_i999Ary[2].empno = pfmFileIOStruct1[2]->empno ;
      PFM_STRCPY( context->inCtxpfm_emp_p_i999Ary[2].ename, pfmFileIOStruct1[2]->ename );
      PFM_STRCPY( context->inCtxpfm_emp_p_i999Ary[2].sal, pfmFileIOStruct1[2]->sal );

      //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:AFTER_CODE NODEID1------------------//

      PFM_TRYNJ(pfmFileIOClose(&fd1));
      //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:FILEIO_CLOSE_EXCEPTION NODEID1------------------//
      if(rc!=RC_NRM) {
         PFM_DBG("[%s] File close Error!!", /tmp/FileIOData.txt);
         return RC_ERR;
      }
      //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:FILEIO_CLOSE_EXCEPTION NODEID1------------------//

    }
    {
        /**************************************
②       * KIND     : DBIO Call
         * NODE ID  : 2
         * NAME     : pfm_emp_p_i999
         * DESCRIPTION :
         *************************************/
        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:DBIO_DYNAMIC_PARAMETER NODEID2------------------//
        // TODO Auto-generated method stub
        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:DBIO_DYNAMIC_PARAMETER NODEID2------------------//

        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:BEFORE_CODE NODEID2------------------//
        // TODO Auto-generated method stub
        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:BEFORE_CODE NODEID2------------------//

        /**************************************
         *   KIND              : DBIO Callee Info
         *   NAME              : pfm_emp_p_i999
         *   EXEC              : INSERT
         *   INPUT             : pfm_emp_p_i999In
         *   OUTPUT            : pfm_emp_p_i999Out
         *   ARRAY INPUT       : pfm_emp_p_i999BundleIn
         *   ARRAY OUTPUT      : NONE
         *   DYNAMIC STRUCTURE : NONE
         *************************************/
        PFM_TRY(pfmDbioDmlArray("pfm_emp_p_i999", 3, context->inCtxpfm_emp_p_i999Ary, NULL, PFMDBIO_NOLOCK));
        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:DBIO_EXCEPTION NODEID2------------------//

        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:DBIO_EXCEPTION NODEID2------------------//

        //DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE:AFTER_CODE NODEID2------------------//
        // TODO Auto-generated method stub
        //DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE:AFTER_CODE NODEID2------------------//

    }
    return RC_NRM;

PFM_CATCH:
    return rc;
}

다음은 위 예제 내용 중 각 번호에 대한 설명이다.

① FileIO 모듈을 Open하여 FD(FileDescriptor)를 가져온다.

figureA 2 1

② DBIO 모듈을 호출한다.

figureA 2 2