Writing and reading data to and from ifs stream file in RPGLE

Writing and reading data to and from ifs stream file in RPGLE
Writing and reading data to a ifs stream file in RPGLE, ifs , RPGLE, v, write data into the IFS file, Reads the file, Closes the file, open(), write(), read(), close(), read() procedure in rpgle,  open(), open() api, file descriptor, ifs stream file, reading data from ifs stream file using rpg as400 in ibmi, c apis, as400, ibmi, as400 and sql tricks, as400 tutorial, ibmi tutorial, working with if, integrated file system,reading streams with the read() API,The read() API is used to read bytes from a stream file,UNIX-type APIs,C language prototype of read() ,RPG version of the prototype read() api,extproc,Working with the IFS in RPG IV, prototyping of read() api,The path parameter,The oflag parameter,The mode parameter, The codepage parameter,The return value of the read() API,Code snippet showing the use of the read() API,Introduction to the IFS, Code snippet showing the use of the write()
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:

  1. First, create and open the ifs stream file in write only mode using C open() api.
  2. Second, write the data to the ifs stream file using C write()api.
  3. Third, close the ifs stream file using C close() api.
  4. Fourth, again open the ifs stream file in read only mode thing time using the same C open() api.
  5. Fifth, read the data from the ifs stream file using the C read() api.
  6. 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;         

Post a Comment

© AS400 and SQL Tricks. All rights reserved. Developed by Jago Desain