Guardian Native C Library Calls Reference Manual (G06.28+, H06.04+)

fopen_guardian(3) Guardian Native C Library Calls Reference Manual
rb Opens a C binary le for reading.
wb Creates a new C binary le for writing, or opens and truncates a C binary le to
zero length.
ab Appends (opens a C binary le for writing at the end of the le, or creates a C
binary le for writing).
rb+ Opens a C binary le for update (reading and writing).
wb+ Truncates or creates a C binary le for update.
ab+ Appends (opens a C binary le for update, writing at the end of the le, or
creates a C binary le for writing).
When you open a le for update, you can perform both input and output operations on the result-
ing stream. However, an output operation cannot be directly followed by an input operation
without an intervening fush() function call or a le positioning operation (fseek(), fsetpos(),or
rewind() function). Also, an input operation cannot be directly followed by an output operation
without an intervening ush or le positioning operation, unless the input operation encounters
the end of the le.
When you open a le for append (that is, when the mode parameter is a, ab, a+,orab+), it is
impossible to overwrite information already in the le. You can use the fseek() function to repo-
sition the le pointer to any position in the le, but when output is written to the le, the current
le pointer is ignored. All output is written at the end of the le and the le pointer is reposi-
tioned to the end of the output.
If two separate processes open the same terminal or process for append (or, if the same process
has more than one concurrent open of a terminal or process for an append operation), each open
can be used to write freely to the le without destroying the output being written using the other
open. The output from the two opens is intermixed in the order in which it is written to the le.
If the data is buffered, it is not actually written until it is ushed.
Note that Guardian disk les cannot have more than one open at a time using fopen_guardian()
unless all of the opens are only for reading (r or rb). To have more than one concurrent open of a
Guardian disk le for modication (any mode value except r or rb), the Guardian FILE_OPEN_
procedure must be used to open the le with an exclusion mode of 0 (zero) for shared access.
When opened, a stream is fully buffered if and only if it can be determined that it does not refer
to an interactive device. The error and End-of-File indicators for the stream are cleared.
The ANSISTREAMS pragma determines whether a text le is type 180 (C binary le) or type 101
(edit le). The Guardian version of fopen( ) distinguishes between text and binary les. If the
mode parameter does not contain a b, the le is created or opened as a text le. The OSS version
of fopen( ) does not distinguish between text and binary les. Text and binary les in the OSS
environment are type 180. Refer to the C/C++ Programmers Guide for information on the
ANSISTREAMS pragma.
The default number of secondary extents for les created by fopen() is 16. The default number of
maxextents for les created by fopen() is 500.
Interoperability Variants
The C run-time library supports two variants of the fopen() function: fopen_oss() and
fopen_guardian(). The variants support the unique le naming conventions and structures of the
OSS and Guardian le systems, respectively.
The header le maps calls to fopen( ) to the variant that matches the target compilation environ-
ment. The target environment is set with the systype pragma.
228 Hewlett-Packard Company 527192-005