![]() |
| 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;
