Guardian Procedure Calls Reference Manual
128 concurrent opens permitted.$0.#ZSPI
10 times the number of subdevices (up to a maximum of 830 opens).$OSP
One open per process permitted.$RECEIVE
Varies by subsystem.Other
• Nowait I/O
Specifying a nowait-depth value greater than 0 causes all I/O operations to be performed
in a nowait manner. Nowait I/O operations must be completed by a call to AWAITIO[X].
Nowait IO operations on different file numbers (even if for the same file) are independent and
may arrive in any order at the destination and may be completed by AWAITIO[X] in any
order.
• Nowait opens
If you open a file in a nowait manner (options.<1> = 1) and if FILE_OPEN_ returns no error
(error = 0), the open operation must be completed by a call to AWAITIO[X]. If there is an
error, no system message is sent to the object being opened and you do not need to call
AWAITIO[X] to complete the operation.
If there is no error, the filenum parameter returned by FILE_OPEN_ is valid. But you cannot
initiate any I/O operation on the file until you complete the open by calling AWAITIO[X].
If you specify the tag parameter in the call to AWAITIO[X], a -30D is returned; the values
returned in the buffer and count parameters to AWAITIO[X] are undefined. If an error
returns from AWAITIO[X], it is your responsibility to close the file.
For the TMF transaction pseudofile, or for a waited file (nowait-depth = 0), a request for
a nowait open is rejected.
The file system implementation of a nowait open might use waited calls in some cases. However,
it is guaranteed that the open message is sent nowait to a process; the opener does not wait
for the process being opened to service the open message.
• Direct and buffered I/O transfers
Except on NSAA systems, a file opened by FILE_OPEN_ uses direct I/O transfers, by default
(user buffers).
SETMODE function 72 is used to override or explicitly set the buffer assignment for a file, that
is, use either user buffers or process file segment (PFS) buffers for I/O transfers. This is unlike
OPEN, which uses PFS buffers for I/O transfers, by default. For systems running H-series RVUs,
the default behavior is determined by the user_buffers flag in the object file, whether the
USERIOBUFFER_ALLOW_ procedure is called, and whether this is an NSAA system.
Calling the USERIOBUFFER_ALLOW_ procedure before the FILE_OPEN procedure will enable
user buffers. The filesystem is still free to select the most efficient buffers to use. In practice,
I/O less than 4096 bytes will use system (PFS) buffers.
If system buffers are not used, you must ensure that you do not use or modify a buffer until a
nowait I/O is completed. The only way to assure system buffers, is to use SETMODE function
72,1 for that file.
For more information, see the description of SETMODE function 72, in Functions (page 1319).
• Sequential block buffering
Sequential block buffering is only supported for disk files. If sequential block buffering is used,
the file should usually be opened with protected or exclusive access. Shared access can be
used, but it is somewhat slower than the other access methods, and there might be concurrency
problems. See the discussion of "Sequential Block Buffering" in the Enscribe Programmer's
Guide.
FILE_OPEN_ Procedure 463