KSAM LOGICAL RECORD POINTER [ KSAM/3000 Reference Manual ] MPE/iX 5.0 Documentation
KSAM/3000 Reference Manual
KSAM LOGICAL RECORD POINTER
Many of the KSAM procedures use a logical record pointer to indicate the
current record in the file. This pointer points to a key value in the
key file that identifies the current record in the data file. The
particular key used, if the file has more than one key, is the key
specified in the current procedure or the last procedure that referenced
a key.
Procedures that use pointers are either pointer-dependent or
pointer-independent. Pointerent procedures expect the pointer to be
positioned at a particular record in order to execute correctly.
Pointer-independent procedures, on the other hand, execute regardless of
where the pointer is positioned and, in most cases, they position the
pointer. (Refer to Table 3-3 for a summary of those procedures that
either position the pointer or are dependent on the pointer position.)
Table 3-3. Positioning the Logical Record Pointer
-----------------------------------------------------------------------------------------------
| | | |
| Procedure | Pointer- | Position of Pointer After |
| Name | Dependent | Execution of Procedure |
| | | |
-----------------------------------------------------------------------------------------------
| | | |
| CKSTART | NO | Points to key whose value was specified in |
| | | call. |
| | | |
-----------------------------------------------------------------------------------------------
| | | |
| CKREADBYKEY | NO | Points to key whose value was specified in |
| | | call. |
| | | |
-----------------------------------------------------------------------------------------------
| | | |
| CKWRITE | NO | Points to key whose value is next in key |
| | | sequence to key value in record just written. |
| | | |
-----------------------------------------------------------------------------------------------
| | | |
| CKREAD | YES | Pointer remains positioned to key value for |
| | | record just read; unless next call is to |
| | | CKREAD, or to CKREWRITE followed by CKREAD, in |
| | | which case, next CKREAD moves pointer to next |
| | | key in key sequence before reading the record. |
| | | |
-----------------------------------------------------------------------------------------------
| | | |
| CKDELETE | YES | Points to next key value in ascending sequence |
| | | following key value in record just deleted. |
| | | |
-----------------------------------------------------------------------------------------------
| | | |
| CKREWRITE | YES (sequential | Pointer remains positioned to key value for |
| | mode) | record jus modified; unless any key value in |
| | | record was changed, in which case, it points to |
| | | next key in ascending seuence after the key in |
| | | the modified record. |
| | | |
-----------------------------------------------------------------------------------------------
| | | |
| | NO (random or | |
| | dynamic mode) | |
| | | |
-----------------------------------------------------------------------------------------------
SHARED ACCESS
Particular care must be taken when using the logical record pointer
during shared access (the file was opened with CKOPENSHR). Since the
record pointer is maintained in a separate control block for each open
file, if more than one user opens the same file, one user may modify the
key file causing the record pointers of other users to point to the wrong
key.
To avoid this problem, you should always lock the file in a shared
environment before calling a procedure that sets the pointer and leave
the file locked until all procedures that depend on the pointer have been
executed. Thus, if you want to read the file sequentially, delete a
record, or modify a record, you should lock the file, call a procedure
that sets the pointer (such as CKSTART), and then call CKREAD, CKDELETE,
or CKREWRITE. When the operation is complete, you can then unlock the
file to give other users access to it.
SAMPLE KSAM FILE
The file KSAMFILE illustrated in Figure 3-2 is used in all subsequent
examples associated with the COBOL procedure calls.
Figure 3-2. Representation of KSAMFILE Used in COBOL Examples
MPE/iX 5.0 Documentation