MainframeMaster
MainframeMaster

COBOL Tutorial

Progress0 of 0 lessons

COBOL Data Sharing

Data sharing in COBOL enables multiple programs to access and modify the same data, allowing coordinated operations and information exchange in mainframe applications. COBOL provides several mechanisms for data sharing: EXTERNAL data items for global shared data, LINKAGE SECTION for parameter passing, common storage areas, file-based sharing, and message-based communication. Understanding these mechanisms is essential for building multi-program applications that work together effectively.

What is Data Sharing?

Data sharing allows multiple COBOL programs to access and modify the same data. This is essential for:

  • Coordinated operations: Programs working together on related tasks
  • State management: Maintaining consistent state across programs
  • Configuration sharing: Sharing system settings and parameters
  • Resource coordination: Coordinating access to shared resources
  • Information exchange: Passing data between programs efficiently

COBOL provides multiple data sharing mechanisms, each suited for different scenarios. Choosing the right mechanism depends on your specific requirements, program relationships, and execution environment.

EXTERNAL Data Items

The EXTERNAL attribute creates a single shared copy of a data item that all programs in the same run unit can access. When you declare a data item with EXTERNAL, COBOL creates one instance of that data that persists for the entire run unit, regardless of which program declares it.

Basic EXTERNAL Syntax

cobol
1
2
3
4
5
6
7
8
WORKING-STORAGE SECTION. 01 EXTERNAL-SYSTEM-STATUS EXTERNAL. 05 SYSTEM-STATUS PIC X(10) VALUE 'INACTIVE'. 88 SYSTEM-ACTIVE VALUE 'ACTIVE'. 88 SYSTEM-INACTIVE VALUE 'INACTIVE'. 05 CURRENT-USER-ID PIC X(8) VALUE SPACES. 05 TRANSACTION-COUNTER PIC 9(10) VALUE 0. 05 ERROR-COUNT PIC 9(5) VALUE 0.

In this example, EXTERNAL-SYSTEM-STATUS is declared with the EXTERNAL attribute. This means:

  • Single instance: Only one copy exists for the entire run unit
  • Global access: Any program in the run unit can access it by name
  • Persistent: The data persists across program calls
  • Shared modifications: Changes by one program are visible to all

EXTERNAL Data Example

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
IDENTIFICATION DIVISION. PROGRAM-ID. MAIN-PROGRAM. DATA DIVISION. WORKING-STORAGE SECTION. 01 EXTERNAL-SHARED-DATA EXTERNAL. 05 SHARED-CUSTOMER-ID PIC 9(8) VALUE 0. 05 SHARED-CUSTOMER-NAME PIC X(30) VALUE SPACES. 05 SHARED-BALANCE PIC 9(9)V99 VALUE 0. 05 SHARED-TRANSACTION-CTR PIC 9(6) VALUE 0. PROCEDURE DIVISION. MAIN-PARA. MOVE 12345678 TO SHARED-CUSTOMER-ID MOVE 'JOHN SMITH' TO SHARED-CUSTOMER-NAME MOVE 5000.00 TO SHARED-BALANCE ADD 1 TO SHARED-TRANSACTION-CTR DISPLAY 'Main Program - Customer ID: ' SHARED-CUSTOMER-ID DISPLAY 'Main Program - Transaction Count: ' SHARED-TRANSACTION-CTR CALL 'SUB-PROGRAM' DISPLAY 'Main Program - After Sub Program Call' DISPLAY 'Transaction Count: ' SHARED-TRANSACTION-CTR DISPLAY 'Balance: ' SHARED-BALANCE STOP RUN.

The subprogram can access the same EXTERNAL data:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
IDENTIFICATION DIVISION. PROGRAM-ID. SUB-PROGRAM. DATA DIVISION. WORKING-STORAGE SECTION. 01 EXTERNAL-SHARED-DATA EXTERNAL. 05 SHARED-CUSTOMER-ID PIC 9(8). 05 SHARED-CUSTOMER-NAME PIC X(30). 05 SHARED-BALANCE PIC 9(9)V99. 05 SHARED-TRANSACTION-CTR PIC 9(6). PROCEDURE DIVISION. SUB-PARA. DISPLAY 'Sub Program - Customer ID: ' SHARED-CUSTOMER-ID DISPLAY 'Sub Program - Customer Name: ' SHARED-CUSTOMER-NAME ADD 100.00 TO SHARED-BALANCE ADD 1 TO SHARED-TRANSACTION-CTR DISPLAY 'Sub Program - Updated Balance: ' SHARED-BALANCE DISPLAY 'Sub Program - Transaction Count: ' SHARED-TRANSACTION-CTR EXIT PROGRAM.

When the subprogram modifies SHARED-BALANCE and SHARED-TRANSACTION-CTR, those changes are immediately visible to the main program because they're accessing the same EXTERNAL data instance.

EXTERNAL Data Characteristics

EXTERNAL Data Item Characteristics
CharacteristicDescription
ScopeAccessible to all programs in the same run unit by name
LifetimePersists for the entire run unit duration
StorageSingle shared instance, not duplicated per program
InitializationInitialized once, typically in the first program that declares it
ModificationsChanges by any program are immediately visible to all programs
NamingMust use the exact same name in all programs that access it

LINKAGE SECTION for Parameter Passing

The LINKAGE SECTION is used to define parameters that are passed between programs. Unlike EXTERNAL data, LINKAGE SECTION items don't allocate storage - they reference storage provided by the calling program. This makes parameter passing efficient and allows bidirectional data exchange.

LINKAGE SECTION Syntax

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DATA DIVISION. LINKAGE SECTION. 01 INPUT-PARAMETERS. 05 CUSTOMER-ID PIC 9(8). 05 TRANSACTION-AMOUNT PIC 9(9)V99. 05 OPERATION-TYPE PIC X. 88 DEPOSIT-OP VALUE 'D'. 88 WITHDRAWAL-OP VALUE 'W'. 01 OUTPUT-PARAMETERS. 05 RETURN-CODE PIC 9(4). 05 RETURN-MESSAGE PIC X(50). 05 NEW-BALANCE PIC 9(9)V99. PROCEDURE DIVISION USING INPUT-PARAMETERS OUTPUT-PARAMETERS.

The USING clause in the PROCEDURE DIVISION header specifies which LINKAGE SECTION items receive parameters from the calling program.

Calling Program Example

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
IDENTIFICATION DIVISION. PROGRAM-ID. CALLING-PROGRAM. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-DATA. 05 CUST-ID PIC 9(8) VALUE 12345678. 05 TRANS-AMOUNT PIC 9(9)V99 VALUE 500.00. 05 OP-TYPE PIC X VALUE 'D'. 01 OUTPUT-DATA. 05 RET-CODE PIC 9(4). 05 RET-MESSAGE PIC X(50). 05 NEW-BAL PIC 9(9)V99. PROCEDURE DIVISION. MAIN-PARA. DISPLAY 'Calling subprogram with parameters...' CALL 'PROCESS-TRANSACTION' USING INPUT-DATA OUTPUT-DATA IF RET-CODE = 0 DISPLAY 'Transaction successful' DISPLAY 'Return Message: ' RET-MESSAGE DISPLAY 'New Balance: ' NEW-BAL ELSE DISPLAY 'Transaction failed' DISPLAY 'Error: ' RET-MESSAGE END-IF STOP RUN.

Called Program Example

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
IDENTIFICATION DIVISION. PROGRAM-ID. PROCESS-TRANSACTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 CURRENT-BALANCE PIC 9(9)V99 VALUE 1000.00. LINKAGE SECTION. 01 INPUT-PARAMETERS. 05 CUSTOMER-ID PIC 9(8). 05 TRANSACTION-AMOUNT PIC 9(9)V99. 05 OPERATION-TYPE PIC X. 88 DEPOSIT-OP VALUE 'D'. 88 WITHDRAWAL-OP VALUE 'W'. 01 OUTPUT-PARAMETERS. 05 RETURN-CODE PIC 9(4). 05 RETURN-MESSAGE PIC X(50). 05 NEW-BALANCE PIC 9(9)V99. PROCEDURE DIVISION USING INPUT-PARAMETERS OUTPUT-PARAMETERS. PROCESS-PARA. DISPLAY 'Processing transaction for customer: ' CUSTOMER-ID IF DEPOSIT-OP ADD TRANSACTION-AMOUNT TO CURRENT-BALANCE MOVE 0 TO RETURN-CODE MOVE 'Deposit successful' TO RETURN-MESSAGE ELSE IF TRANSACTION-AMOUNT <= CURRENT-BALANCE SUBTRACT TRANSACTION-AMOUNT FROM CURRENT-BALANCE MOVE 0 TO RETURN-CODE MOVE 'Withdrawal successful' TO RETURN-MESSAGE ELSE MOVE 1 TO RETURN-CODE MOVE 'Insufficient funds' TO RETURN-MESSAGE END-IF END-IF MOVE CURRENT-BALANCE TO NEW-BALANCE EXIT PROGRAM.

The called program receives parameters through LINKAGE SECTION items and can modify them. Changes to OUTPUT-PARAMETERS are visible to the calling program because they reference the same storage.

LINKAGE SECTION vs EXTERNAL

EXTERNAL vs LINKAGE SECTION Comparison
AspectEXTERNALLINKAGE SECTION
PurposeGlobal shared data accessible by nameParameter passing to specific programs
AccessAny program in run unit can access by nameOnly the called program receives parameters
StorageSingle shared instanceReferences caller's storage
LifetimeEntire run unitDuring program execution
InitializationOnce, typically in first programBy calling program before CALL
Use CaseSystem-wide configuration, counters, statusProgram-specific input/output parameters

Common Storage Areas

Common storage refers to data areas that persist across program calls within the same run unit. This includes EXTERNAL data items and WORKING-STORAGE data in programs that remain loaded. Common storage allows programs to share state without explicit parameter passing.

Common Storage Example

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
WORKING-STORAGE SECTION. 01 COMMON-SESSION-DATA EXTERNAL. 05 SESSION-ID PIC X(20) VALUE SPACES. 05 USER-ID PIC X(8) VALUE SPACES. 05 LOGIN-TIME PIC 9(14) VALUE 0. 05 LAST-ACTIVITY-TIME PIC 9(14) VALUE 0. 05 TRANSACTION-COUNT PIC 9(6) VALUE 0. 01 COMMON-CONFIGURATION EXTERNAL. 05 MAX-TRANSACTIONS PIC 9(4) VALUE 1000. 05 TIMEOUT-SECONDS PIC 9(4) VALUE 300. 05 DEBUG-MODE PIC X VALUE 'N'. 88 DEBUG-ON VALUE 'Y'. 88 DEBUG-OFF VALUE 'N'. 05 LOG-LEVEL PIC 9 VALUE 2. PROCEDURE DIVISION. INITIALIZE-COMMON-STORAGE. MOVE FUNCTION CURRENT-DATE TO SESSION-ID MOVE 'USER001' TO USER-ID MOVE FUNCTION CURRENT-DATE TO LOGIN-TIME MOVE FUNCTION CURRENT-DATE TO LAST-ACTIVITY-TIME MOVE 0 TO TRANSACTION-COUNT DISPLAY 'Common storage initialized' DISPLAY 'Session ID: ' SESSION-ID DISPLAY 'User ID: ' USER-ID.

Any program in the run unit can access and modify this common storage, making it ideal for session management, configuration sharing, and maintaining state across program boundaries.

File-Based Data Sharing

File-based data sharing is used when programs run in different address spaces, as separate jobs, or at different times. Programs write shared data to files that other programs can read. This method is slower than memory-based sharing but necessary for cross-address-space communication.

File-Based Sharing Example

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
FILE SECTION. FD SHARED-DATA-FILE LABEL RECORDS ARE STANDARD RECORDING MODE IS F ORGANIZATION IS SEQUENTIAL. 01 SHARED-DATA-RECORD. 05 RECORD-TYPE PIC X. 88 CUSTOMER-REC VALUE 'C'. 88 TRANSACTION-REC VALUE 'T'. 88 CONTROL-REC VALUE 'X'. 05 RECORD-DATA PIC X(99). 05 TIMESTAMP PIC 9(14). 05 SEQUENCE-NUMBER PIC 9(6). WORKING-STORAGE SECTION. 01 FILE-STATUS PIC X(2). 01 RECORD-COUNT PIC 9(6) VALUE 0. PROCEDURE DIVISION. WRITE-SHARED-DATA. OPEN OUTPUT SHARED-DATA-FILE MOVE 'C' TO RECORD-TYPE MOVE 'CUSTOMER DATA: 12345678' TO RECORD-DATA MOVE FUNCTION CURRENT-DATE TO TIMESTAMP MOVE 1 TO SEQUENCE-NUMBER WRITE SHARED-DATA-RECORD ADD 1 TO RECORD-COUNT MOVE 'T' TO RECORD-TYPE MOVE 'TRANSACTION: DEPOSIT 500.00' TO RECORD-DATA MOVE FUNCTION CURRENT-DATE TO TIMESTAMP MOVE 2 TO SEQUENCE-NUMBER WRITE SHARED-DATA-RECORD ADD 1 TO RECORD-COUNT DISPLAY 'Written ' RECORD-COUNT ' records to shared file' CLOSE SHARED-DATA-FILE STOP RUN.

Another program can read from this file:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
FILE SECTION. FD SHARED-DATA-FILE LABEL RECORDS ARE STANDARD RECORDING MODE IS F ORGANIZATION IS SEQUENTIAL. 01 SHARED-DATA-RECORD. 05 RECORD-TYPE PIC X. 05 RECORD-DATA PIC X(99). 05 TIMESTAMP PIC 9(14). 05 SEQUENCE-NUMBER PIC 9(6). WORKING-STORAGE SECTION. 01 FILE-STATUS PIC X(2). 01 END-OF-FILE PIC X VALUE 'N'. 88 EOF VALUE 'Y'. PROCEDURE DIVISION. READ-SHARED-DATA. OPEN INPUT SHARED-DATA-FILE PERFORM UNTIL EOF READ SHARED-DATA-FILE AT END SET EOF TO TRUE NOT AT END DISPLAY 'Record Type: ' RECORD-TYPE DISPLAY 'Data: ' RECORD-DATA DISPLAY 'Timestamp: ' TIMESTAMP DISPLAY 'Sequence: ' SEQUENCE-NUMBER DISPLAY '---' END-READ END-PERFORM CLOSE SHARED-DATA-FILE STOP RUN.

File-Based Sharing Considerations

  • File locking: Implement proper locking to prevent concurrent access conflicts
  • Record format: Use standardized record formats for reliable data exchange
  • Synchronization: Coordinate read/write operations to ensure data consistency
  • Error handling: Handle file I/O errors and missing files gracefully
  • Performance: File I/O is slower than memory access; use only when necessary
  • Persistence: Data persists after program termination, unlike memory-based sharing

Message-Based Data Sharing

Message-based data sharing uses structured message formats to exchange data between programs. This approach is common in online environments like CICS, where programs communicate through message queues or transaction data areas.

Message Structure Example

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
WORKING-STORAGE SECTION. 01 MESSAGE-HEADER. 05 MESSAGE-TYPE PIC X(10). 05 MESSAGE-LENGTH PIC 9(4). 05 MESSAGE-SEQUENCE PIC 9(6). 05 MESSAGE-TIMESTAMP PIC 9(14). 05 MESSAGE-SOURCE PIC X(8). 05 MESSAGE-DESTINATION PIC X(8). 01 MESSAGE-BODY. 05 CUSTOMER-DATA. 10 CUSTOMER-ID PIC 9(8). 10 CUSTOMER-NAME PIC X(30). 10 ACCOUNT-BALANCE PIC 9(9)V99. 05 TRANSACTION-DATA. 10 TRANSACTION-ID PIC 9(10). 10 TRANSACTION-TYPE PIC X(10). 10 TRANSACTION-AMOUNT PIC 9(9)V99. 10 TRANSACTION-DATE PIC 9(8). 01 MESSAGE-CONTROL. 05 MESSAGE-STATUS PIC X. 88 MSG-PENDING VALUE 'P'. 88 MSG-PROCESSED VALUE 'C'. 88 MSG-ERROR VALUE 'E'. 05 ERROR-CODE PIC 9(3). 05 ERROR-MESSAGE PIC X(50). PROCEDURE DIVISION. BUILD-MESSAGE. MOVE 'CUSTOMER' TO MESSAGE-TYPE MOVE 120 TO MESSAGE-LENGTH MOVE 1 TO MESSAGE-SEQUENCE MOVE FUNCTION CURRENT-DATE TO MESSAGE-TIMESTAMP MOVE 'PROG001' TO MESSAGE-SOURCE MOVE 'PROG002' TO MESSAGE-DESTINATION MOVE 12345678 TO CUSTOMER-ID MOVE 'JOHN SMITH' TO CUSTOMER-NAME MOVE 5000.00 TO ACCOUNT-BALANCE MOVE 2024000001 TO TRANSACTION-ID MOVE 'DEPOSIT' TO TRANSACTION-TYPE MOVE 500.00 TO TRANSACTION-AMOUNT MOVE 20240115 TO TRANSACTION-DATE SET MSG-PENDING TO TRUE MOVE 0 TO ERROR-CODE MOVE SPACES TO ERROR-MESSAGE DISPLAY 'Message built and ready for transmission' DISPLAY 'Message Type: ' MESSAGE-TYPE DISPLAY 'Customer: ' CUSTOMER-ID ' - ' CUSTOMER-NAME.

Best Practices for Data Sharing

Follow these best practices to ensure reliable and maintainable data sharing:

1. Use EXTERNAL Judiciously

Only use EXTERNAL for data that truly needs to be shared globally. Overuse of EXTERNAL can make programs tightly coupled and difficult to maintain. Consider:

  • Is this data truly needed by multiple programs?
  • Would parameter passing be more appropriate?
  • Can this data be encapsulated within a single program?

2. Initialize EXTERNAL Data Once

Initialize EXTERNAL data in a single, well-documented location to avoid conflicts:

cobol
1
2
3
4
5
6
7
8
9
10
PROCEDURE DIVISION. INITIALIZE-EXTERNAL-DATA. *> Initialize only if not already initialized IF SHARED-INITIALIZED = 'N' MOVE FUNCTION CURRENT-DATE TO SHARED-SESSION-ID MOVE 0 TO SHARED-TRANSACTION-COUNTER MOVE 0 TO SHARED-ERROR-COUNT MOVE 'Y' TO SHARED-INITIALIZED DISPLAY 'External data initialized' END-IF.

3. Use Clear Naming Conventions

Use clear, descriptive names that indicate shared data:

  • Prefix EXTERNAL data with EXTERNAL- or SHARED-
  • Use consistent naming across all programs
  • Document which programs access which shared data

4. Implement Proper Synchronization

When multiple programs can modify shared data simultaneously, implement synchronization:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
WORKING-STORAGE SECTION. 01 EXTERNAL-SHARED-DATA EXTERNAL. 05 SHARED-LOCK PIC X VALUE 'N'. 88 DATA-LOCKED VALUE 'Y'. 88 DATA-UNLOCKED VALUE 'N'. 05 SHARED-VALUE PIC 9(9)V99. PROCEDURE DIVISION. UPDATE-SHARED-DATA. *> Acquire lock PERFORM UNTIL DATA-UNLOCKED IF DATA-UNLOCKED MOVE 'Y' TO SHARED-LOCK EXIT PERFORM END-IF END-PERFORM *> Perform update ADD 100.00 TO SHARED-VALUE *> Release lock MOVE 'N' TO SHARED-LOCK.

5. Validate Shared Data

Always validate shared data before use, as other programs may have modified it:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PROCEDURE DIVISION. USE-SHARED-DATA. *> Validate before use IF SHARED-CUSTOMER-ID = 0 DISPLAY 'ERROR: Invalid customer ID' MOVE 1 TO RETURN-CODE EXIT PROGRAM END-IF IF SHARED-BALANCE < 0 DISPLAY 'ERROR: Negative balance detected' MOVE 2 TO RETURN-CODE EXIT PROGRAM END-IF *> Use validated data PERFORM PROCESS-CUSTOMER.

6. Document Data Sharing

Document all data sharing relationships:

  • Which programs access which shared data
  • What each program does with the shared data
  • Initialization requirements
  • Synchronization requirements
  • Error handling considerations

Common Data Sharing Patterns

Pattern 1: Configuration Sharing

cobol
1
2
3
4
5
6
WORKING-STORAGE SECTION. 01 EXTERNAL-CONFIG EXTERNAL. 05 MAX-RECORDS PIC 9(6) VALUE 10000. 05 TIMEOUT-SECONDS PIC 9(4) VALUE 300. 05 DEBUG-MODE PIC X VALUE 'N'. 05 LOG-LEVEL PIC 9 VALUE 2.

All programs can access system configuration without passing it as parameters.

Pattern 2: Counter Sharing

cobol
1
2
3
4
5
6
WORKING-STORAGE SECTION. 01 EXTERNAL-STATISTICS EXTERNAL. 05 TOTAL-TRANSACTIONS PIC 9(10) VALUE 0. 05 SUCCESSFUL-TRANS PIC 9(10) VALUE 0. 05 FAILED-TRANS PIC 9(8) VALUE 0. 05 TOTAL-PROCESSING-TIME PIC 9(8)V99 VALUE 0.

Multiple programs can update shared counters for system-wide statistics.

Pattern 3: Status Sharing

cobol
1
2
3
4
5
6
7
8
WORKING-STORAGE SECTION. 01 EXTERNAL-SYSTEM-STATUS EXTERNAL. 05 SYSTEM-STATE PIC X(10). 88 SYSTEM-STARTING VALUE 'STARTING'. 88 SYSTEM-ACTIVE VALUE 'ACTIVE'. 88 SYSTEM-SHUTTING-DOWN VALUE 'SHUTDOWN'. 05 CURRENT-USER PIC X(8). 05 LAST-ERROR PIC X(50).

Programs can check and update system status for coordination.

Explain Like I'm 5: Data Sharing

Think of data sharing like a shared whiteboard:

  • EXTERNAL data is like a whiteboard in a common room - everyone can see it and write on it, and changes are visible to everyone immediately
  • LINKAGE SECTION is like passing a note - you write something on paper and hand it to someone, they can read it and write back, then hand it back to you
  • File-based sharing is like leaving a message in a mailbox - you write it, put it in the mailbox, and someone else reads it later
  • Common storage is like a shared locker - everyone has the combination and can access what's inside

Just like you need to coordinate when multiple people use the same whiteboard (so they don't write over each other), programs need to coordinate when sharing data to avoid conflicts!

Practice Exercises

Complete these exercises to reinforce your understanding:

Exercise 1: EXTERNAL Data Sharing

Create two programs: a main program that initializes EXTERNAL customer data (ID, name, balance), and a subprogram that reads and modifies the balance. Display the balance in both programs to verify sharing works.

Exercise 2: LINKAGE SECTION Parameters

Create a calling program that passes customer ID and transaction amount to a called program. The called program should validate the transaction, update a balance, and return a return code and message through LINKAGE SECTION.

Exercise 3: File-Based Sharing

Create a program that writes customer records to a shared file, and another program that reads from that file and displays the records. Include proper error handling and file status checking.

Exercise 4: Configuration Sharing

Create an EXTERNAL configuration area with system settings (max records, timeout, debug mode). Create multiple programs that read and use this configuration, and one program that initializes it.

Exercise 5: Synchronized Updates

Create a shared counter with a lock mechanism. Have multiple programs attempt to increment the counter, using the lock to prevent race conditions. Display the final counter value to verify all updates were applied.

Test Your Knowledge

1. What does the EXTERNAL attribute do in COBOL?

  • Makes data accessible only within the current program
  • Makes data accessible to all programs in the same run unit
  • Makes data read-only
  • Makes data automatically initialized to zero

2. Where do you define parameters passed between programs?

  • WORKING-STORAGE SECTION
  • LINKAGE SECTION
  • FILE SECTION
  • LOCAL-STORAGE SECTION

3. What is the main difference between EXTERNAL and LINKAGE SECTION?

  • EXTERNAL is for parameters, LINKAGE is for shared data
  • EXTERNAL is for global shared data, LINKAGE is for parameter passing
  • There is no difference
  • EXTERNAL is faster than LINKAGE

4. When should you use file-based data sharing?

  • Always, it's the fastest method
  • When programs run in different address spaces or at different times
  • Only for small amounts of data
  • Never, use EXTERNAL instead

5. What happens if multiple programs modify EXTERNAL data simultaneously?

  • The system prevents it automatically
  • Race conditions can occur without proper synchronization
  • The data is automatically locked
  • Only the first program's changes are saved

6. How do you pass data from a calling program to a called program?

  • Using EXTERNAL data items
  • Using CALL with parameters and LINKAGE SECTION
  • Using file I/O
  • Using global variables

Related Concepts

Related Pages