ILE−RPGから統合ファイルシステムを利用してみましょう!
残念ながら、RPGでは統合ファイルシステム(IFS)にアクセスできません。
ここでは、CのモジュールをILE−RPGにバインドして統合ファイルシステムを利用します。
Cのモジュール
IFS1C(IFSREADとIFSWRITEを実装)
/*---------------------------------------------------------------*/
/* PROGRAM-ID : IFS1C */
/* REMARKS : IFSファイルI/O */
/* AUTHOR : Y.Ide */
/* DATE-WRITEN : 1999/9/24 */
/* VERSION : 01.00 ORIGINAL */
/*---------------------------------------------------------------*/
/* IFS(統合ファイルシステム)のストリームファイルを */
/* バイナリーモードでオープンします。 */
/* CRTCMOD SYSIFCOPT(IFSIO)でコンパイルしてください */
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int IFSREAD(char *filename, char *buf, int *buflen) {
FILE *fp1;
char bin[32768] = {0};
int rc = 0;
char *ptr;
int blank = ' ';
/* NULLターミネイト*/
ptr = strchr(filename,blank);
if (ptr != NULL) *ptr = 0;
/*読み込み専用でファイルオープン*/
fp1 = fopen(filename,"rb");
if (fp1 == NULL){
perror(filename);
rc = -1;
}
fgets(bin, (*buflen)+1, fp1);
fclose(fp1);
memcpy(buf,bin,*buflen);
return rc;
}
int IFSWRITE(char *filename, char *buf, int *buflen) {
FILE *fp1;
char bin[32768] = {0};
int rc = 0;
char *ptr;
int blank = ' ';
/* NULLターミネイト*/
ptr = strchr(filename,blank);
if (ptr != NULL) *ptr = 0;
memcpy(bin,buf,*buflen);
/*追記でファイルオープン*/
fp1 = fopen(filename,"ab");
if (fp1 == NULL){
perror(filename);
rc = -1;
}
fputs(bin,fp1);
fclose(fp1);
return rc;
}
|
ILE-RPGのモジュール IFS1R(メインプログラム)
H DATEDIT(*YMD/)
H*---------------------------------------------------------------*
H* PROGRAM-ID : IFC1R *
H* REMARKS : IFSREADを呼び出すPGM *
H* AUTHOR : Y.IDE *
H* DATE-WRITEN : 1999/9/24 *
H* VERSION : 01.00 ORIGINAL *
H*---------------------------------------------------------------*
H* IFS1C モジュールをバイントしてください。
H*---------------------------------------------------------------*
DIFSWRITE PR 10I 0 EXTPROC('IFSWRITE')
D 1024
D 32767
D 10I 0
D*
DIFSREAD PR 10I 0 EXTPROC('IFSREAD')
D 1024
D 32767
D 10I 0
D BUFDS DS
D BUF 32767 INZ(' ')
D BUFA 1 OVERLAY(BUF) DIM(32767)
D*
D FILEN S 1024 INZ(' ')
D BUFLEN S 10I 0
D RC S 10I 0 INZ(0)
C*
C MOVE *LOVAL FILEN
C EVAL FILEN = '/HOME/FILE.EBC'
C*
C Z-ADD 12 BUFLEN
C MOVEL 'テストです'BUF
C EVAL RC = IFSWRITE(FILEN : BUF : BUFLEN)
C*
C Z-ADD 12 BUFLEN
C MOVEL 'その2です'BUF
C EVAL RC = IFSWRITE(FILEN : BUF : BUFLEN)
C*
C MOVE *BLANK BUF
C*
C Z-ADD 24 BUFLEN
C EVAL RC = IFSREAD(FILEN : BUF : BUFLEN)
C*
C MOVEL BUF FLD52 52
C*
C FLD52 DSPLY
C SETON LR
C RETURN
C*
|
作成方法は、
- CRTRPGMOD MODULE(CLAB/IFS1R) SRCFILE(CLAB/QRPGLESRC)
- CRTCMOD MODULE(CLAB/IFS1C) SRCFILE(CLAB/QCSRC) SYSIFCOPT(*IFSIO)
- CRTPGM PGM(CLAB/IFS1R) MODULE(CLAB/IFS1R CLAB/IFS1C)
WRKLNK OBJ('/HOME/*')
を実行すると、FILE.EBCが作成されているはずです。
|
|