Chapter Contents |
Previous |
Next |
afflush |
Portability: | SAS/C extension |
SYNOPSIS | |
DESCRIPTION | |
RETURN VALUE | |
CAUTION | |
IMPLEMENTATION | |
EXAMPLES | |
RELATED FUNCTIONS | |
SEE ALSO |
SYNOPSIS |
#include <lcio.h> int afflush(FILE *f, int toeof);
DESCRIPTION |
The
afflush
function flushes the output buffers for the
FILE
addressed by
f
to disk and
performs additional system-dependent operations to ensure that the data will
be accessible later, even if the program or the system fails. If the
toeof
argument is nonzero, the file is positioned
at the end of the file as buffers are flushed; otherwise, the file position
remains unchanged. You can use the
afflush
function with
FILE
opened for keyed access
as well for text or binary access.
For files opened with the
trunc=yes
amparm specified or defaulted,
afflush
truncates the file at the current file position; that is, all
characters after the current position are erased. If this behavior is not
desired, a nonzero
toeof
argument can be
specified to position to the end of file, thereby avoiding truncation.
For nondisk files, such as the terminal,
afflush
is treated the same as
fflush
,
preceded by positioning at the end of the file if the
toeof
argument is nonzero.
The
afflush
function
fails if the last file operation was a read. On completion of
afflush
, the next operation can be either a read or a write.
RETURN VALUE |
The
afflush
function returns 0 or
EOF
if an
error occurs.
CAUTION |
For some file types,
afflush
may be rejected if the file is not positioned to the end of
a record. This restriction applies to PDS members opened with
grow=no
.
Using
afflush
is
significantly more costly than
fflush
.
IMPLEMENTATION |
After flushing buffers,
afflush
ensures file integrity under OS/390 by issuing the CLOSE TYPE=T
macro. Under CMS, it issues FSCLOSE for standard CMS disk files, followed
by a call to FINIS for the associated minidisk, or it calls DMSCOMM (shared
file commit) for CMS shared files. For USS HFS files, it invokes the
fsync
system call.
EXAMPLES |
#include <lcio.h> #include <stdlib.h> extern int num_updates; extern FILE *database; main() { int rc; extern int num_updates; extern FILE *database; int transaction(FILE *); /* Update database, return number of */ /* transactions or negative to quit. */ database = fopen("dsn:userid.DATABASE", "r"); num_updates = 0; /* Reset update counter. */ for(;;) { /* Run transactions until quitting time. */ int trans; trans = transaction(database); /* Perform the next transaction. */ if (trans < 0) break; num_updates += trans; /* Monitor number of updates. */ if (num_updates >= 100) { /* Every 100 updates, checkpoint. */ rc = afflush(database, 0); /* Flush updates to disk. */ if (rc != 0) { puts("Error saving recent updates."); fclose(database); abort(); } } } fclose(database); }
RELATED FUNCTIONS |
SEE ALSO |
Chapter Contents |
Previous |
Next |
Top of Page |
Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.