fflush
, fflush_unlocked
—flush buffered file outputSynopsis
#include <stdio.h> int fflush(FILE *fp); #define _BSD_SOURCE #include <stdio.h> int fflush_unlocked(FILE *fp); #include <stdio.h> int _fflush_r(struct _reent *reent, FILE *fp); #define _BSD_SOURCE #include <stdio.h> int _fflush_unlocked_r(struct _reent *reent, FILE *fp);
Description
The stdio
output functions can buffer output before delivering it
to the host system, in order to minimize the overhead of system calls.
Use fflush
to deliver any such pending output (for the file
or stream identified by fp) to the host system.
If fp is NULL
, fflush
delivers pending output from all
open files.
Additionally, if fp is a seekable input stream visiting a file descriptor, set the position of the file descriptor to match next unread byte, useful for obeying POSIX semantics when ending a process without consuming all input from the stream.
fflush_unlocked
is a non-thread-safe version of fflush
.
fflush_unlocked
may only safely be used within a scope
protected by flockfile() (or ftrylockfile()) and funlockfile(). This
function may safely be used in a multi-threaded program if and only
if they are called while the invoking thread owns the (FILE *)
object, as is the case after a successful call to the flockfile() or
ftrylockfile() functions. If threads are disabled, then
fflush_unlocked
is equivalent to fflush
.
The alternate functions _fflush_r
and _fflush_unlocked_r
are
reentrant versions, where the extra argument reent is a pointer to
a reentrancy structure, and fp must not be NULL.
Returns
fflush
returns 0
unless it encounters a write error; in that
situation, it returns EOF
.
Portability
ANSI C requires fflush
. The behavior on input streams is only
specified by POSIX, and not all implementations follow POSIX rules.
fflush_unlocked
is a BSD extension also provided by GNU libc.
No supporting OS subroutines are required.