|
Kelly, I wrote pgms that read/write IFS files calling the corresponding Function in the ILE C Runtime Library. The first pgm read a file the second Write a file. I hope you find this helpful. Best regards. Roy. ---------------------------------------------------------------------------- PROCESS NOMONOPRC NOSTDTRUNC APOST. IDENTIFICATION DIVISION. *---------------------------------------------------------------- * Compilation instruction: * CRTCBLMOD MODULE(yourlib/UNIXAPI) * SRCFILE(QCBLSRC) * DBGVIEW(*SOURCE) * CRTPGM PGM(yourlib/UNIXAPI) * MODULE(yourlib/UNIXAPI) * BNDSRVPGM(QSYS/QC2IFS QSYS/QC2UTIL1) PROGRAM-ID. UNIXAPI. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 ERRNO-PTR POINTER VALUE NULL. 77 RC PIC S9(9) BINARY. 77 FILE-NAME PIC X(50). 77 FILE-MODE PIC X(10). 77 FILE-PTR POINTER VALUE NULL. 77 ERRNO-EDT PIC 9(9)-. 01 BUFFER PIC X(1024). LINKAGE SECTION. 77 ERRNO PIC S9(9) BINARY. PROCEDURE DIVISION. THE-FIRST SECTION. FIRST-PARA. STRING '/myfile.txt' X'00' DELIMITED BY SIZE INTO FILE-NAME. STRING 'r' X'00' DELIMITED BY SIZE INTO FILE-MODE. CALL PROCEDURE '_C_IFS_fopen' USING FILE-NAME FILE-MODE RETURNING FILE-PTR. IF FILE-PTR = NULL CALL PROCEDURE '__errno' RETURNING ERRNO-PTR SET ADDRESS OF ERRNO TO ERRNO-PTR MOVE ERRNO TO ERRNO-EDT DISPLAY 'File open failed. Errno: ' ERRNO-EDT GO END-PGM. PERFORM READ-IFS UNTIL RC NOT = ZERO. CALL PROCEDURE '_C_IFS_fclose' USING BY VALUE FILE-PTR RETURNING RC. END-PGM. GOBACK. * READ-IFS. MOVE SPACES TO BUFFER CALL PROCEDURE '_C_IFS_fgets' USING BY VALUE ADDRESS OF BUFFER BY VALUE LENGTH OF BUFFER BY VALUE FILE-PTR RETURNING RC. IF RC = ZERO UNSTRING BUFFER DELIMITED BY X'25' INTO BUFFER DISPLAY 'Data read from file: ' BUFFER. ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- PROCESS NOMONOPRC NOSTDTRUNC APOST. IDENTIFICATION DIVISION. *---------------------------------------------------------------- * Compilation instruction: * CRTCBLMOD MODULE(yourlib/UNIXAPI1) * SRCFILE(QCBLSRC) * DBGVIEW(*SOURCE) * CRTPGM PGM(yourlib/UNIXAPI1) * MODULE(yourlib/UNIXAPI1) * BNDSRVPGM(QSYS/QC2IFS QSYS/QC2UTIL1) PROGRAM-ID. UNIXAPI1. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 ERRNO-PTR POINTER VALUE NULL. 77 ERRMSG-PTR POINTER VALUE NULL. 77 RC PIC S9(9) BINARY. 77 FILE-NAME PIC X(50). 77 FILE-MODE PIC X(10). 77 FILE-PTR POINTER VALUE NULL. 77 ERRNO-EDT PIC 9(9)-. 01 BUFFER PIC X(1024). 01 BUFFER-LENGTH PIC S9(9) BINARY. 01 ITEM-COUNT PIC S9(9) BINARY. LINKAGE SECTION. 77 ERRNO PIC S9(9) BINARY. 77 ERRMSG PIC X(1024). PROCEDURE DIVISION. THE-FIRST SECTION. FIRST-PARA. STRING '/myfile.txt' X'00' DELIMITED BY SIZE INTO FILE-NAME. STRING 'w+' X'00' DELIMITED BY SIZE INTO FILE-MODE. CALL PROCEDURE '_C_IFS_fopen' USING FILE-NAME FILE-MODE RETURNING FILE-PTR. IF FILE-PTR = NULL CALL PROCEDURE '__errno' RETURNING ERRNO-PTR SET ADDRESS OF ERRNO TO ERRNO-PTR MOVE ERRNO TO ERRNO-EDT DISPLAY 'File open failed. Errno: ' ERRNO-EDT CALL PROCEDURE 'strerror' USING BY VALUE ERRNO RETURNING ERRMSG-PTR SET ADDRESS OF ERRMSG TO ERRMSG-PTR MOVE SPACES TO BUFFER MOVE ZERO TO BUFFER-LENGTH UNSTRING ERRMSG DELIMITED BY X'00' INTO BUFFER COUNT BUFFER-LENGTH DISPLAY 'Sysmsg: ' BUFFER(1:BUFFER-LENGTH) GO END-PGM. PERFORM WRITE-IFS. CALL PROCEDURE '_C_IFS_fclose' USING BY VALUE FILE-PTR RETURNING RC. END-PGM. GOBACK. * WRITE-IFS. MOVE SPACES TO BUFFER STRING 'Line Written by UNIXAPI1' X'25' DELIMITED BY SIZE INTO BUFFER MOVE 1 TO BUFFER-LENGTH INSPECT BUFFER TALLYING BUFFER-LENGTH FOR CHARACTERS BEFORE INITIAL X'25' MOVE 1 TO ITEM-COUNT CALL PROCEDURE '_C_IFS_fwrite' USING BY VALUE ADDRESS OF BUFFER BY VALUE BUFFER-LENGTH BY VALUE ITEM-COUNT BY VALUE FILE-PTR RETURNING RC. IF RC NOT = ITEM-COUNT CALL PROCEDURE '__errno' RETURNING ERRNO-PTR SET ADDRESS OF ERRNO TO ERRNO-PTR MOVE ERRNO TO ERRNO-EDT DISPLAY 'File write failed. Errno: ' ERRNO-EDT GO END-PGM. ---------------------------------------------------------------------------- -----Messaggio originale----- Da: cobol400-l-bounces@xxxxxxxxxxxx [mailto:cobol400-l-bounces@xxxxxxxxxxxx] Per conto di Kelly Cookson Inviato: lunedì 8 marzo 2004 2.03 A: 'cobol400-l@xxxxxxxxxxxx' Oggetto: [COBOL400-L] IFS APIs for ILE COBOL Does anyone know where I can find a good tutorial/white paper/article on using the IFS APIs in ILE COBOL? I have checked the ILE COBOL programming guide and the ILE COBOL reference manual, but found virtually nothing. I have checked the Information Center, which talks quite a bit about the IFS APIs, but which has no COBOL examples or even explanations for use in COBOL. The ILE COBOL pogramming guide says it is possible to call IFS APIs using CALL LINKAGE TYPE statements in the SPECIAL NAMES section of the ENVRONMENT division. But then it doesn't exlain how to use the APIs in the PROCEDURE division. Could anyone explain this to me? What I would really like to see is an IFS Redbook, covering concepts of the IFS, management of the IFS using Operations Navigator and Netserver, and programming with the IFS APIs in each ILE languages. Maybe I will fire off a recommendation to IBM... Thanks in advance for any help. Kelly _______________________________________________ This is the COBOL Programming on the iSeries/AS400 (COBOL400-L) mailing list To post a message email: COBOL400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/cobol400-l or email: COBOL400-L-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/cobol400-l.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.