Next: , Previous: ferror, Up: Stdio


4.9 fflush, fflush_unlocked—flush buffered file output

Synopsis

     #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.