ILE COBOL Programmer's Guide

Sharing EXTERNAL Files

Using the EXTERNAL clause for files allows separately compiled programs within the run unit to have access to common files. These EXTERNAL files are handled as weak exports. Refer to ILE Concepts for further information about strong and weak exports.

When an EXTERNAL file is defined in multiple ILE COBOL programs, once it is opened by one of these ILE COBOL programs, it is accessible to all of the programs. Similarly, if one of the programs closes the EXTERNAL file, its is no longer accessible by any of the programs.

For multiple ILE COBOL programs in multiple module objects, a runtime consistency check is made the first time the ILE COBOL program declaring a given EXTERNAL file is called to see if the definition in that module object is consistent with the definitions in already called ILE COBOL programs in other module objects. If any inconsistency is found, then a runtime exception message is issued.

The example in Figure 59 shows some of the advantages of using EXTERNAL files:

The following table gives the program (or subprogram) name for the example in Figure 59 and describes its function.

Table 12. Program Names for Input-Output Using EXTERNAL Files Example

Name Function
EF1MAIN This is the main program. It calls all the subprograms and then verifies the contents of a record area.
EF1OPENO This program opens the external file for output and checks the File Status Code.
EF1WRITE This program writes a record to the external file and checks the File Status Code.
EF1OPENI This program opens the external file for input and checks the File Status Code.
EF1READ This program reads record from the external file and checks the File Status Code.
EF1CLOSE This program closes the external file and checks the File Status Code.

The sample program also uses the EXTERNAL clause for a data item in the Working-Storage Section. This item is used for checking File Status Codes.

Figure 59. Input-Output Using EXTERNAL Files


 5722WDS V5R3M0  030905 LN  IBM ILE COBOL                 CBLGUIDE/EXTLFL          ISERIES1   03/09/15 13:11:39        Page      2
                                     S o u r c e
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
     1     000100 IDENTIFICATION DIVISION.
     2     000200 PROGRAM-ID.  EF1MAIN.
           000300*
           000400* This is the main program that controls
           000500* the external file processing.
           000600*
           000700
     3     000800 ENVIRONMENT DIVISION.
     4     000900 INPUT-OUTPUT SECTION.
     5     001000 FILE-CONTROL.
     6     001100      SELECT EF1
     7     001200         ASSIGN TO DISK-EFILE1
     8     001300         FILE STATUS IS EFS1
     9     001400         ORGANIZATION IS SEQUENTIAL.
           001500
    10     001600 DATA DIVISION.
    11     001700 FILE SECTION.
    12     001800 FD  EF1 IS EXTERNAL
           001900            RECORD CONTAINS 80 CHARACTERS.
    13     002000 01  EF-RECORD-1.
    14     002100     05  EF-ITEM-1     PIC X(80).
           002200
    15     002300 WORKING-STORAGE SECTION.
    16     002400 01  EFS1              PIC 99 EXTERNAL.
           002500
    17     002600 PROCEDURE DIVISION.
           002700 EF1MAIN-PROGRAM SECTION.
           002800 MAINLINE.
    18     002900      CALL "EF1OPENO"
    19     003000      CALL "EF1WRITE"
    20     003100      CALL "EF1CLOSE"
    21     003200      CALL "EF1OPENI"
    22     003300      CALL "EF1READ"
    23     003400      IF EF-RECORD-1 = "First Record" THEN
    24     003500         DISPLAY "First record correct"
           003600      ELSE
    25     003700         DISPLAY "First record incorrect"
    26     003800         DISPLAY "Expected:  First Record"
    27     003900         DISPLAY "Found:    " EF-RECORD-1
           004000      END-IF
    28     004100      CALL "EF1CLOSE"
    29     004200      GOBACK.
    30     004300 END PROGRAM EF1MAIN.
           004400
           004600
                           * * * * *   E N D   O F   S O U R C E   * * * * *
 5722WDS V5R3M0  030905 LN  IBM ILE COBOL                 CBLGUIDE/EXTLFL          ISERIES1   03/09/15 13:11:39        Page      5
                                     S o u r c e
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
     1     004700 IDENTIFICATION DIVISION.
     2     004800 PROGRAM-ID.  EF1OPENO.
           004900*
           005000* This program opens the external file for output.
           005100*
           005200
     3     005300 ENVIRONMENT DIVISION.
     4     005400 INPUT-OUTPUT SECTION.
     5     005500 FILE-CONTROL.
     6     005600      SELECT EF1
     7     005700         ASSIGN TO DISK-EFILE1
     8     005800         FILE STATUS IS EFS1
     9     005900         ORGANIZATION IS SEQUENTIAL.
           006000
    10     006100 DATA DIVISION.
    11     006200 FILE SECTION.
    12     006300 FD  EF1 IS EXTERNAL
           006400            RECORD CONTAINS 80 CHARACTERS.
    13     006500 01  EF-RECORD-1.
    14     006600     05  EF-ITEM-1     PIC X(80).
           006700
    15     006800 WORKING-STORAGE SECTION.
    16     006900 01  EFS1              PIC 99 EXTERNAL.
           007000
    17     007100 PROCEDURE DIVISION.
           007200 EF1OPENO-PROGRAM SECTION.
           007300 MAINLINE.
    18     007400      OPEN OUTPUT EF1
    19     007500      IF EFS1 NOT = 0 THEN
    20     007600         DISPLAY "File Status " EFS1 " on OPEN OUTPUT"
    21     007700         STOP RUN
           007800      END-IF
    22     007900      GOBACK.
    23     008000 END PROGRAM EF1OPENO.
           008100
           008300
                           * * * * *   E N D   O F   S O U R C E   * * * * *
 5722WDS V5R3M0  030905 LN  IBM ILE COBOL                 CBLGUIDE/EXTLFL          ISERIES1   03/09/15 13:11:39        Page      8
                                     S o u r c e
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
     1     008400 IDENTIFICATION DIVISION.
     2     008500 PROGRAM-ID.  EF1WRITE.
           008600*
           008700* This program writes a record to the external file.
           008800*
           008900
     3     009000 ENVIRONMENT DIVISION.
     4     009100 INPUT-OUTPUT SECTION.
     5     009200 FILE-CONTROL.
     6     009300      SELECT EF1
     7     009400         ASSIGN TO DISK-EFILE1
     8     009500         FILE STATUS IS EFS1
     9     009600         ORGANIZATION IS SEQUENTIAL.
           009700
    10     009800 DATA DIVISION.
    11     009900 FILE SECTION.
    12     010000 FD  EF1 IS EXTERNAL
           010100            RECORD CONTAINS 80 CHARACTERS.
    13     010200 01  EF-RECORD-1.
    14     010300     05  EF-ITEM-1     PIC X(80).
           010400
    15     010500 WORKING-STORAGE SECTION.
    16     010600 01  EFS1              PIC 99 EXTERNAL.
           010700
    17     010800 PROCEDURE DIVISION.
           010900 EF1WRITE-PROGRAM SECTION.
           011000 MAINLINE.
    18     011100      MOVE "First record" TO EF-RECORD-1
    19     011200      WRITE EF-RECORD-1
    20     011300      IF EFS1 NOT = 0 THEN
    21     011400         DISPLAY "File Status " EFS1 " on WRITE"
    22     011500         STOP RUN
           011600      END-IF
    23     011700      GOBACK.
    24     011800 END PROGRAM EF1WRITE.
           011900
           012100
                           * * * * *   E N D   O F   S O U R C E   * * * * *
 5722WDS V5R3M0  030905 LN  IBM ILE COBOL                 CBLGUIDE/EXTLFL          ISERIES1   03/09/15 13:11:39        Page     11
                                     S o u r c e
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
     1     012200 IDENTIFICATION DIVISION.
     2     012300 PROGRAM-ID.  EF1OPENI.
           012400*
           012500* This program opens the external file for input.
           012600*
           012700
     3     012800 ENVIRONMENT DIVISION.
     4     012900 INPUT-OUTPUT SECTION.
     5     013000 FILE-CONTROL.
     6     013100      SELECT EF1
     7     013200         ASSIGN TO DISK-EFILE1
     8     013300         FILE STATUS IS EFS1
     9     013400         ORGANIZATION IS SEQUENTIAL.
           013500
    10     013600 DATA DIVISION.
    11     013700 FILE SECTION.
    12     013800 FD  EF1 IS EXTERNAL
           013900            RECORD CONTAINS 80 CHARACTERS.
    13     014000 01  EF-RECORD-1.
    14     014100     05  EF-ITEM-1     PIC X(80).
           014200
    15     014300 WORKING-STORAGE SECTION.
    16     014400 01  EFS1              PIC 99 EXTERNAL.
           014500
    17     014600 PROCEDURE DIVISION.
           014700 EF1OPENI-PROGRAM SECTION.
           014800 MAINLINE.
    18     014900      OPEN INPUT EF1
    19     015000      IF EFS1 NOT = 0 THEN
    20     015100         DISPLAY "File Status " EFS1 " on OPEN INPUT"
    21     015200         STOP RUN
           015300      END-IF
    22     015400      GOBACK.
    23     015500 END PROGRAM EF1OPENI.
           015600
           015800
                           * * * * *   E N D   O F   S O U R C E   * * * * *
 5722WDS V5R3M0  030905 LN  IBM ILE COBOL                 CBLGUIDE/EXTLFL          ISERIES1   03/09/15 13:11:39        Page     14
                                     S o u r c e
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
     1     015900 IDENTIFICATION DIVISION.
     2     016000 PROGRAM-ID.  EF1READ.
           016100*
           016200* This program reads a record from the external file.
           016300*
           016400
     3     016500 ENVIRONMENT DIVISION.
     4     016600 INPUT-OUTPUT SECTION.
     5     016700 FILE-CONTROL.
     6     016800      SELECT EF1
     7     016900         ASSIGN TO DISK-EFILE1
     8     017000         FILE STATUS IS EFS1
     9     017100         ORGANIZATION IS SEQUENTIAL.
           017200
    10     017300 DATA DIVISION.
    11     017400 FILE SECTION.
    12     017500 FD  EF1 IS EXTERNAL
           017600            RECORD CONTAINS 80 CHARACTERS.
    13     017700 01  EF-RECORD-1.
    14     017800     05  EF-ITEM-1     PIC X(80).
           017900
    15     018000 WORKING-STORAGE SECTION.
    16     018100 01  EFS1              PIC 99 EXTERNAL.
           018200
    17     018300 PROCEDURE DIVISION.
           018400 EF1READ-PROGRAM SECTION.
           018500 MAINLINE.
    18     018600      READ EF1
    19     018700      IF EFS1 NOT = 0 THEN
    20     018800         DISPLAY "File Status " EFS1 " on READ"
    21     018900         STOP RUN
           019000      END-IF
    22     019100      GOBACK.
    23     019200 END PROGRAM EF1READ.
           019300
           019500
                           * * * * *   E N D   O F   S O U R C E   * * * * *
 5722WDS V5R3M0  030905 LN  IBM ILE COBOL                 CBLGUIDE/EXTLFL          ISERIES1   03/09/15 13:11:39        Page     17
                                     S o u r c e
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
     1     019600 IDENTIFICATION DIVISION.
     2     019700 PROGRAM-ID.  EF1CLOSE.
           019800*
           019900* This program reads a record from the external file.
           020000*
           020100
     3     020200 ENVIRONMENT DIVISION.
     4     020300 INPUT-OUTPUT SECTION.
     5     020400 FILE-CONTROL.
     6     020500      SELECT EF1
     7     020600         ASSIGN TO DISK-EFILE1
     8     020700         FILE STATUS IS EFS1
     9     020800         ORGANIZATION IS SEQUENTIAL.
           020900
    10     021000 DATA DIVISION.
    11     021100 FILE SECTION.
    12     021200 FD  EF1 IS EXTERNAL
           021300            RECORD CONTAINS 80 CHARACTERS.
    13     021400 01  EF-RECORD-1.
    14     021500     05  EF-ITEM-1     PIC X(80).
           021600
    15     021700 WORKING-STORAGE SECTION.
    16     021800 01  EFS1              PIC 99 EXTERNAL.
           021900
    17     022000 PROCEDURE DIVISION.
           022100 EF1CLOSE-PROGRAM SECTION.
           022200 MAINLINE.
    18     022300      CLOSE EF1
    19     022400      IF EFS1 NOT = 0 THEN
    20     022500         DISPLAY "File Status " EFS1 " on CLOSE"
    21     022600         STOP RUN
           022700      END-IF
    22     022800      GOBACK.
    23     022900 END PROGRAM EF1CLOSE.
           023000
           023100
                           * * * * *   E N D   O F   S O U R C E   * * * * *


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]