FileIO 사용예제
본 장에서는 데이터베이스에서 데이터를 읽어 파일에 저장하는 경우와 파일에서 데이터를 읽어 데이터베이스로 저장하는 경우로 나누어 FileIO를 사용하는 예를 설명한다.
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 모듈을 이용하여 데이터베이스에 접근하여 데이터를 읽는다.
② FileIO 모듈을 Open하여 FD(FileDescriptor)를 가져온다.
③ DBIO 모듈의 결과 값을 담고 있는 출력 구조체로 FileIO의 입력 구조체를 설정한다.
④ FileIO 구조체의 내용을 파일에 저장한다.

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)를 가져온다.
② DBIO 모듈을 호출한다.