Writing and reading data to a ifs stream file in RPGLE |
Steps involved in Writing and reading data to and from ifs stream file
Writing and reading data to and from ifs stream file involves various steps. Those steps involved use of various C APIs which we are going to use in our program:
- First, create and open the ifs stream file in write only mode using C open() api.
- Second, write the data to the ifs stream file using C write()api.
- Third, close the ifs stream file using C close() api.
- Fourth, again open the ifs stream file in read only mode thing time using the same C open() api.
- Fifth, read the data from the ifs stream file using the C read() api.
- Finally, close the ifs stream file using C close() api.
RPGLE program for writing and reading data to and from a ifs stream file
RPG Code in Fixed format for writing and reading data to and from ifs stream file in RPGLE program.
HDFTACTGRP(*NO) D read PR 10i 0 extproc('read') * 32 bit, no. of byt D fileds 10i 0 value *file descriptor D buffer * value * pointer to byte D noofbytes 10U 0 value * 32 bits D close PR 10i 0 extproc('close') * D fileds 10i 0 value *file descriptor D write PR 10i 0 extproc('write') * 32 bit, no. of byt D fileds 10i 0 value *file descriptor D buffer * value * pointer to byte D noofbytes 10U 0 value * 32 bits D open PR 10I 0 extproc('open') D ifspath * value options(*string) *ifs path D oflag 10I 0 value *string of 32 bits D mode 10U 0 value options(*nopass) * 9 bits D codepage 10U 0 value options(*nopass) * * <-----oflag----> D O_readonly C 1 D O_writeonly C 2 D O_readwrite C 4 D O_createfileifnotexist... D C 8 D O_exclusivecreate... D C 16 D O_truncateto0bytes... D C 64 D O_appendtofile C 256 D O_converttextbycodepage... D C 8388608 D O_openintextmode... D C 16777216 * * <-----mode----> * owner,group,other (RWX) * owner authority D M_readowner C 256 D M_writeowner C 128 D M_executeowner C 64 * group authority D M_readgroup C 32 D M_writegroup C 16 D M_executegroup C 8 * other people D M_readother C 4 D M_writeother C 2 D M_executeother C 1 * Difspath s 512a Doflag s 10I 0 Dmode s 10U 0 Dcodepage s 10U 0 Dfiledescriptor s 10i 0 Difsdata s 500a inz Dreturn_write s 10i 0 inz Dreturn_close s 10i 0 inz Dreturn_read s 10i 0 inz C EVAL ifspath = '/home/easyclass/openfile3' C EVAL oflag = O_writeonly + C O_createfileifnotexist C EVAL mode = M_executeowner C EVAL filedescriptor = open(%trim(ifspath): C oflag: C mode) C IF filedescriptor < 0 C RETURN C ENDIF C EVAL ifsdata = 'TEST IFS WRITE() API' C EVAL return_write = write(filedescriptor: C %addr(ifsdata):%size(ifsdata)) C IF return_write < %size(ifsdata) C RETURN C ENDIF C EVAL return_close = close(filedescriptor) C IF return_close = -1 C RETURN C ENDIF C EVAL oflag = O_readonly C EVAL filedescriptor = open(%trim(ifspath): C oflag) C IF filedescriptor < 0 C RETURN C ENDIF C EVAL ifsdata = ' ' C EVAL return_read = read(filedescriptor: C %addr(ifsdata):%size(ifsdata)) C IF return_read < 1 C 'EOF' DSPLY C ENDIF C EVAL return_close = close(filedescriptor) C IF return_close = -1 C RETURN C ENDIF C EVAL *INLR = *ON C RETURN
RPG Code in /Free and /End-Free format for writing and reading data to and from ifs stream file in RPGLE program.
HDFTACTGRP(*NO) D read PR 10i 0 extproc('read') * 32 bit, no. of byt D fileds 10i 0 value *file descriptor D buffer * value * pointer to byte D noofbytes 10U 0 value * 32 bits D close PR 10i 0 extproc('close') * D fileds 10i 0 value *file descriptor D write PR 10i 0 extproc('write') * 32 bit, no. of byt D fileds 10i 0 value *file descriptor D buffer * value * pointer to byte D noofbytes 10U 0 value * 32 bits D open PR 10I 0 extproc('open') D ifspath * value options(*string) *ifs path D oflag 10I 0 value *string of 32 bits D mode 10U 0 value options(*nopass) * 9 bits D codepage 10U 0 value options(*nopass) * * <-----oflag----> D O_readonly C 1 D O_writeonly C 2 D O_readwrite C 4 D O_createfileifnotexist... D C 8 D O_exclusivecreate... D C 16 D O_truncateto0bytes... D C 64 D O_appendtofile C 256 D O_converttextbycodepage... D C 8388608 D O_openintextmode... D C 16777216 * * <-----mode----> * owner,group,other (RWX) * owner authority D M_readowner C 256 D M_writeowner C 128 D M_executeowner C 64 * group authority D M_readgroup C 32 D M_writegroup C 16 D M_executegroup C 8 * other people D M_readother C 4 D M_writeother C 2 D M_executeother C 1 * Difspath s 512a Doflag s 10I 0 Dmode s 10U 0 Dcodepage s 10U 0 Dfiledescriptor s 10i 0 Difsdata s 500a inz Dreturn_write s 10i 0 inz Dreturn_close s 10i 0 inz Dreturn_read s 10i 0 inz /free ifspath = '/home/easyclass/openfile3'; oflag = O_writeonly + O_createfileifnotexist; mode = M_readowner + M_writeowner + M_executeowner; filedescriptor = open(%trim(ifspath): oflag: mode); if filedescriptor < 0; return; endif; ifsdata = 'TEST IFS WRITE() API'; return_write = write(filedescriptor:%addr(ifsdata):%size(ifsdata)); if return_write < %size(ifsdata); return; endif; return_close = close(filedescriptor); if return_close = -1; return; endif; oflag = O_readonly ; filedescriptor = open(%trim(ifspath): oflag); if filedescriptor < 0; return; endif; ifsdata = ' '; return_read = read(filedescriptor:%addr(ifsdata):%size(ifsdata)); if return_read < 1; DSPLY 'EOF'; endif; return_close = close(filedescriptor); if return_close = -1; return; endif; *inlr = *on; return; /end-free
RPG Code in Fully Free format for writing and reading data to and from ifs stream file in RPGLE program.
**FREE CTL-OPT DFTACTGRP(*NO); DCL-PR read int(10) EXTPROC('read'); fileds int(10) VALUE; buffer pointer VALUE; noofbytes uns(10) VALUE; END-PR; DCL-PR write int(10) EXTPROC('write'); fileds int(10) VALUE; buffer pointer VALUE; noofbytes uns(10) VALUE; END-PR; DCL-PR open int(10) EXTPROC('open'); ifspath pointer VALUE options(*string); oflag int(10) VALUE; mode uns(10) VALUE options(*nopass); codepage uns(10) VALUE options(*nopass); END-PR; DCL-PR close int(10) EXTPROC('close'); fileds int(10) VALUE; END-PR; // * <-----oflag----> DCL-C O_readonly 1; DCL-C O_writeonly 2; DCL-C O_readwrite 4; DCL-C O_createfileifnotexist 8; DCL-C O_exclusivecreate 16; DCL-C O_truncateto0bytes 64; DCL-C O_appendtofile 256; DCL-C O_converttextbycodepage 8388608; DCL-C O_openintextmode 16777216; // * <-----mode----> // * owner,group,other (RWX) // * owner authority DCL-C M_readowner 256; DCL-C M_writeowner 128; DCL-C M_executeowner 64; // * group authority DCL-C M_readgroup 32; DCL-C M_writegroup 16; DCL-C M_executegroup 8; // * other people DCL-C M_readother 4; DCL-C M_writeother 2; DCL-C M_executeother 1; DCL-S ifspath CHAR(512); DCL-S oflag int(10); DCL-S mode uns(10); DCL-S codepage uns(10); DCL-S filedescriptor int(10); DCL-S ifsdata char(500) inz; DCL-S return_write int(10) inz; DCL-S return_close int(10) inz; DCL-S return_read int(10) inz; ifspath = '/home/easyclass/openfile3'; oflag = O_writeonly + O_createfileifnotexist; mode = M_readowner + M_writeowner + M_executeowner; filedescriptor = open(%trim(ifspath): oflag: mode); if filedescriptor < 0; return; endif; ifsdata = 'TEST IFS WRITE() API'; return_write = write(filedescriptor:%addr(ifsdata):%size(ifsdata)); if return_write < %size(ifsdata); return; endif; return_close = close(filedescriptor); if return_close = -1; return; endif; oflag = O_readonly ; filedescriptor = open(%trim(ifspath): oflag); if filedescriptor < 0; return; endif; ifsdata = ' '; return_read = read(filedescriptor:%addr(ifsdata):%size(ifsdata)); if return_read < 1; DSPLY 'EOF'; endif; return_close = close(filedescriptor); if return_close = -1; return; endif; *inlr = *on; return;