The OPEN
Statement
The OPEN statement initiates the processing of files. It also performs checking
and/or writing of labels and other input-output operations.
The REVERSED phrase of the OPEN statement is classed as an obsolete element
in the ANSI'85 standard and is scheduled to be deleted from the next full
revision of the ANSI Standard.
All dialects in this COBOL implementation fully support this syntax. The
FLAGSTD Compiler directive can be used to detect all occurrences of this syntax.
Although it is a part of the standard COBOL definition, the REVERSED phrase
of the OPEN statement is explicitly excluded from the X/Open COBOL language
definitions and should not be used in a conforming X/Open COBOL source program.
The OPEN statement allocates system resources for a synchronization data
item and initializes the data item.
General Formats


where sharing-phrase is:


Syntax Rules
- The files referenced in the OPEN statement need not all have the same organization
or access.

If SHARING ALL is specified and the INPUT phrase is not specified, the LOCK
MODE clause must be specified in the file control entry for file-name-1.
NO REWIND is documentary only.
-
The I-O phrase can be used only for disk files.
- The EXTEND phrase must be used only for files for which the LINAGE clause
has not been specified.
- The EXTEND phrase must not be specified with multiple file reels.
- The REVERSED phrase can be used only for fixed-length record sequential
files.
The EXTEND phrase can be used for files in sequential access mode.

The SHARING phrase must not be specified for files with line sequential
organization.
Identifier-1 must reference an elementary data item with a USAGE of EVENT-POINTER,
MONITOR-POINTER, MUTEX-POINTER or SEMAPHORE-POINTER.
General Rules
- Prior to the successful execution of an OPEN statement for a given file,
no statement (except for a SORT or MERGE statement with the USING or GIVING
phrases) can be executed that references that file, either explicitly or implicitly.

The successful execution of an OPEN statement determines the availability
of the file and results in the file connector referenced by the file-name
being in an open mode. The successful execution of an OPEN statement associates
the file with the file-name through a file connector.
The key words INPUT, OUTPUT, I-O, and EXTEND specify the type of input-output
operations intended for the file through the file connector and establish
the open mode. (See table 14-4, Permissible Combinations of Statements and
OPEN Modes.)
A file is available if it is physically present and is recognized by the
file handling system. Table 1, Opening Available and Unavailable
Files (file not currently open), shows the results of opening available and
unavailable files that are not currently open. Table 2, Opening Available
Shared Files that are Currently Open by Another File Connector, shows the
results of opening available and unavailable files that are currently open
by another file connector.
Open Mode |
File is Available |
File is Unavailable |
INPUT |
Normal open |
Open is unsuccessful |
INPUT (optional file) |
Normal open |
Normal open; the first read causes the at end condition or invalid key condition |
I-O |
Normal open |
Open is unsuccessful |
I-O (optional file) |
Normal open |
Open causes the file to be created |
OUTPUT |
Normal open; the file contains no records |
Open causes the file to be created |
EXTEND |
Normal open |
Open is unsuccessful |
EXTEND (optional file) |
Normal open |
Open causes the file to be created |
Table 1: Opening Available and UnavailableFiles
(File not Currently Open)
Open request |
Most Restrictive Existing Sharing Mode and Open Mode |
Sharing with no Other |
Sharing with Read Only |
Sharing with All Other |
extend/ I-O/ input/ output |
extend/ I-O/ output |
input |
extend/ I-O/ output |
input |
SHARING WITH NO OTHER |
EXTEND/ I-O/ INPUT/ OUTPUT/ |
Unsuccessful open |
Unsuccessful open |
Unsuccessful open |
Unsuccessful open |
Unsuccessful open |
SHARING WITH READ ONLY |
EXTEND/ I-O |
Unsuccessful open |
Unsuccessful open |
Unsuccessful open |
Unsuccessful open |
Normal open |
INPUT |
Unsuccessful open |
Unsuccessful open |
Normal open |
Unsuccessful open |
Normal open |
OUTPUT |
Unsuccessful open |
Unsuccessful open |
Unsuccessful open |
Unsuccessful open |
Unsuccessful open |
SHARING WITH ALL OTHER |
EXTEND/ I-O |
Unsuccessful open |
Unsuccessful open |
Unsuccessful open |
Normal open |
Normal open |
INPUT |
Unsuccessful open |
Normal open |
Normal open |
Normal open |
Normal open |
OUTPUT |
Unsuccessful open |
Unsuccessful open |
Unsuccessful open |
Unsuccessful open |
Unsuccessful open |
Table 2: Opening Available SharedFiles
that are Currently Open by Another File Connector
- The successful execution of an OPEN statement makes the associated record
area available .
- In Table 3, "X" at an intersection indicates that the specified
statement, used in the access mode given for that row, can be used with the
open mode given at the top of the column.
File Access Mode |
OPEN Mode |
Statement |
Input |
Output |
Input-Output |
Extend |
Sequential |
READ |
X |
|
X |
|
WRITE |
|
X |
|
X |
REWRITE |
|
|
X |
|
Random (Non-Sequential Files) |
READ |
X |
|
X |
|
WRITE |
|
X |
X |
|
REWRITE |
|
|
X |
|
START |
|
|
|
|
DELETE |
|
|
X |
|
Dynamic (Non-Sequential Files) |
READ |
X |
|
X |
|
WRITE |
|
X |
X |
|
REWRITE |
|
|
X |
|
START |
X |
|
X |
|
DELETE |
|
|
X |
|
Table 3: Permissible
Combinations of Statements and OPEN Modes
Note: The START and DELETE statements cannot be used with record
or line
sequential files.
If the WITH LOCK phrase is specified, the OPEN statement acquires a lock
on the whole file. (This is equivalent to specifying LOCK MODE IS EXCLUSIVE
in the SELECT statement for the file. See the topic The File Control Entry
in the chapter Environment Division.)
If, during the execution of an OPEN statement,
a file attribute conflict occurs, the execution of the OPEN statement is unsuccessful.
Your COBOL system defines which of the fixed file attributes are validated
during the execution of the OPEN statement. See your file handling documentation
for more details. The validation of fixed file attributes can vary depending
on the organization and/or storage medium of the file.
A file can be opened with the INPUT, OUTPUT, EXTEND and I-O phrases in the
same run unit. Following the initial execution of an OPEN statement for a
file connector, each subsequent OPEN statement execution for that same file
connector must be preceded by the execution of a CLOSE statement for that
file connector, even if the file is optional.
- Execution of the OPEN statement does not obtain or release the first data
record.
- The external name of the file specified in the SELECT clause for a file is
processed as follows:
- When the INPUT phrase is specified, execution of the OPEN statement causes
the name to be checked in accordance with the operating system conventions
for opening files for input.
- When the OUTPUT phrase is specified, execution of the OPEN statement causes
the name to be checked in accordance with the operating system conventions
for opening files for output.
- The file description entry for file-name-1, file-name-2, file-name-3, and
file-name-4 must be equivalent to that used when this file was created.
-
For files being opened with the INPUT or I-O phrase, the OPEN statement
sets the file position indicator to the first record currently existing in
the file for indexed and sequential files, and record position one for relative
files. If no records exist in the file, the file position indicator is set
such that the next executed READ statement for an indexed or sequential file
will result in an AT END condition. If the file does not exist, OPEN INPUT
causes an error status, unless the file is optional.
-
When the I-O phrase is specified and the LABEL RECORDS
clause indicates label records are present, the execution of the OPEN statement
includes the following steps:
- The labels are checked in accordance with the operating system-specified
conventions for input-output label checking.
- The new labels are written in accordance with the operating system-specified
conventions for input-output label writing.
- Upon successful execution of an OPEN statement with the OUTPUT phrase specified,
a file is created. At that time the associated file contains no data records.
If a file of the same name exists it is deleted. If the file is write-protected
an error occurs.
When the EXTEND phrase is specified, the OPEN statement positions the file
immediately after the last logical record for that file. The last logical
record for a sequential file is the last record written in the file. In a
relative file it is the currently existing record with the highest relative
record number, and in an indexed file it is the currently existing record
with the highest prime key value.
-
Execution of the OPEN statement
causes the value of the FILE STATUS data item to be updated (see the topic
I-O Status in the chapter Procedure Division).
When LOCK MODE IS EXCLUSIVE is specified in the SELECT/ ASSIGN statement
of a file, successful execution of an OPEN statement of that file locks the
file exclusively to that run unit.
When LOCK MODE IS AUTOMATIC or LOCK MODE IS MANUAL is specified in the SELECT/ASSIGN
statement of a file, the file that is referred to is shareable. More than
one run unit can successfully open such a file.
A file opened for OUTPUT, and relative and indexed
files opened EXTEND, are implicitly defined as files with an exclusive lock,
that is, they are not shareable.
Only shareable files opened for I-O can acquire record locks.
- If execution of the OPEN statement is unsuccessful, the physical file is
not affected and the following actions take place in this order:
- A value is placed in the I-O status associated with file-name to indicate
the condition that caused the OPEN statement to be unsuccessful.
- Any applicable USE AFTER EXCEPTION procedure is executed. (See the topic
The USE Statement.)
-
The I-O phrase permits the opening of a file
for both input and output operations. If the file does not exist, the following
rules apply:
- If the OPTIONAL phrase is specified in the SELECT clause for the file, the
file is created
- If the NOT OPTIONAL phrase is specified in the SELECT clause for the file,
an error occurs
-
If neither phrase is specified, and the directive OPTIONAL-FILE was specified
when the source element was compiled, the file is created.
- If neither phrase is specified, and the directive NOOPTIONAL-FILE was specified
when the source element was compiled, an error occurs.
- If an input file is designated with the OPTIONAL phrase in its SELECT clause,
when the file is opened there is an interrogation for the presence or absence
of this file. If the file is not present, the first READ statement for this
file causes the AT END condition to occur.
- When the EXTEND phrase is specified, the OPEN statement positions the file
immediately following the last logical record of that file. Subsequent WRITE
statements referencing the file will add records to the file as though the
file had been opened with the OUTPUT phrase. If the file does not exist it
is created.
When the EXTEND phrase is specified and the LABEL RECORDS clause in this
file's FD indicates label records are present, the execution of the OPEN statement
includes the following steps:
- The beginning file labels are processed only in the case of a single reel/unit
file.
- The beginning reel/unit labels on the last existing reel/unit are processed
as though the file was being opened with the INPUT phrase.
- The existing ending file labels are processed as though the file is being
opened with the INPUT phrase. These labels are then deleted.
- Processing then proceeds as though the file had been opened with the OUTPUT
phrase.
- The I-O phrase permits the opening of a file for both input and output operations,
except files with ORGANIZATION LINE SEQUENTIAL.
If the file does not exist, it is created and used as an empty file for input
unless NOT OPTIONAL was specified in the SELECT statement.
An attempt to READ from the newly created file causes an error.

The SHARING phrase can be specified only for shared files. (See the topic
Sharing Mode in the chapter Language Fundamentals.)

The SHARING phrase specifies what operations may be performed on the file
through other file connectors sharing the file. (See the topic Sharing Mode
in the chapter Language Fundamentals.)

The SHARING phrase overrides any SHARING clause in the file control entry
of the file connector associated with the file-name. If there is no SHARING
phrase on the OPEN statement, then file sharing is completely specified in
the file control entry. If neither a SHARING phrase on the OPEN statement
nor a SHARING clause in the file control entry is specified, the sharing mode
is established for the file connector in accordance with the rules specified
in the topic Sharing Mode in the chapter Language Fundamentals.
- If the storage medium for the file permits rewinding, the following rules
apply:
- Execution of the OPEN statement causes the file to be positioned at its beginning.
- When the REVERSED phrase is specified, the file is positioned at its end
by execution of the OPEN statement.
- When the REVERSED phrase is specified, the subsequent READ statements for
the file make the data available in reversed order; that is, starting with
the last record.
I-O
mode is not allowed for line sequential files unless the REWRITE-LS Compiler
directive is set.
Prior to the successful execution of an OPEN statement for a given synchronization
data item, no statement can be executed that references that data item.
The successful execution of an OPEN statement determines the availability
of the synchronization data item.
Execution of the OPEN statement causes the RETURN-CODE special register to
be updated with one of the values specified for the synchronization item library
routines.
Following the initial execution of an OPEN statement for a synchronization
data item, each subsequent OPEN statement execution for that same data item
must be preceded by the execution of a CLOSE statement for that data item.
If identifier-1 references an event data item, the execution of the OPEN
statement initializes the data item to FALSE.
If identifier-1 references a monitor data item, the execution of the OPEN
statement initializes the monitor to NOT BROWSING, NOT READING, and NOT WRITING.
If identifier-1 references a mutex data item, the execution of the OPEN statement
initializes the data item to OFF.
If identifier-1 references a semaphore data item, the execution of the OPEN
statement initializes the data item to zero.