Guardian Procedure Calls Reference Manual

If a nowait FILE_READUPDATE64 is executed, then the operation must be completed by calling
either FILE_AWAITIO64_ or FILE_COMPLETEL_.
WARNING! When using nowait file I/O, data corruption might occur if the read buffer is
modified before either FILE_AWAITIO64_ or FILE_COMPLETEL_ completes the call. The buffer
space must not be freed or reused while the I/O is in progress.
Default locking mode action
If the default locking mode is in effect when a call to FILE_READUPDATE64_ is made to a
locked file or record, but the filenum of the locked file differs from the filenum in the call,
the caller of FILE_READUPDATE64_ is suspended and queued in the "locking" queue behind
other processes attempting to access the file or record.
NOTE: A deadlock condition occurs if a call to FILE_READUPDATE64_ is made by a process
having multiple opens on the same file and the filenum used to lock the file differs from the
filenum supplied to FILE_READUPDATE64_.
Alternate locking mode action
If the alternate locking mode is in effect when FILE_READUPDATE64_ is called and the file is
locked but not through the file number supplied in the call, the call is rejected with error 73
(file is locked).
Lock mode by SETMODE function
The locking mode is specified by SETMODE function 4.
Value of the current key and current-key specifier
For key-sequenced, relative, and entry-sequenced files, random processing implies that a
designated record must exist. Therefore, positioning for FILE_READUPDATE64_ is always to
the record described by the exact value of the current key and current-key specifier. If such a
record does not exist, the call to FILE_READUPDATE64_ is rejected with a file-system error 11
(record does not exist). This is unlike sequential processing through FILE_READ64_ where
positioning can be by approximate, generic, or exact key value.
Buffer considerations
The buffer and count transferred can be in the user stack or in an extended data segment.
The buffer and count transferred cannot be in the user code space.
The buffer and count transferred address must be relative; they cannot be an absolute
extended address.
If the buffer or count transferred is in a selectable extended data segment, the segment
must be in use at the time of the call. Flat segments allocated by a process are always
accessible to the process.
The size of the transfer is subject to current restrictions for the type of file.
If the file is opened for nowait I/O, and the buffer is in an extended data segment, you
must not deallocate or reduce the size of the extended data segment before the I/O
finishes with a call to FILE_AWAITIO64_ or FILE_COMPLETEL_ or is canceled by a call
to CANCEL or CANCELREQL.
If the file is opened for nowait I/O, you must not modify the buffer before the I/O finishes
with a call to FILE_AWAITIO64_ or FILE_COMPLETEL_. This also applies to other processes
that might be sharing the segment. It is the application's responsibility to ensure this.
If the file is opened for nowait I/O, a selectable extended data segment containing the
buffer need not be in use at the time of the call to FILE_AWAITIO64_ or FILE_COMPLETEL_.
FILE_READUPDATE64_ Procedure 489