Closing ifs stream file using C API close in RPGLE |
The close() API
The close() API is just the opposite of the open() api and used to close a file that is being opened using the open() API.
Prototype of close() api in C
int close(int fildes)
- int: It tells what type of value this close() api returns. The int data type in C is a 32 bits signed integer and is equivalent to "10 I 0" in RPGLE.
- close: It is the name of the procedure.
- int fildes:The first parameter is an integer named File descriptor which is the return value from the open() api and identifies the file being opened.
Prototype of close() API in RPGLE
D close PR 10i 0 extproc('close') * D fileds 10i 0 value *file descriptor
It returns a "10I 0" an int if return value is -1 then that means there is some error in closing file using close() api. It accepts one parameter, which is also a 10I 0 an int. The parameter is passed by value, and we use extproc() to call close.
Using close() ifs C api in RPGLE program
RPG Code in Fixed format for Using close() api in RPGLE to close ifs stream file.
HDFTACTGRP(*NO) D close PR 10i 0 extproc('close') * D fileds 10i 0 value *file descriptor 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----&lgt; 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 * Dreturn_close s 10i 0 inz C EVAL ifspath = '/home/easyclass/openfile2' C EVAL oflag = O_readwrite + 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 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 Using close() api in RPGLE to close ifs stream file.
HDFTACTGRP(*NO) D close PR 10i 0 extproc('close') * D fileds 10i 0 value *file descriptor 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 * Dreturn_close s 10i 0 inz /free ifspath = '/home/easyclass/openfile2'; oflag = O_readonly + O_createfileifnotexist; mode = M_executeowner; filedescriptor = open(%trim(ifspath): oflag: mode); if filedescriptor < 0; return; endif; return_close = close(filedescriptor); if return_close = -1; return; endif; *inlr = *on; return; /end-free
RPG Code in Fully Free format for Using close() api in RPGLE to close ifs stream file.
**FREE CTL-OPT DFTACTGRP(*NO); DCL-PR close int(10) EXTPROC('close'); fileds int(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; // * <-----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 return_close int(10) inz; ifspath = '/home/easyclass/openfile2'; oflag = O_readonly + O_createfileifnotexist; mode = M_executeowner; filedescriptor = open(%trim(ifspath): oflag: mode); if filedescriptor < 0; return; endif; return_close = close(filedescriptor); if return_close = -1; return; endif; *inlr = *on; return;