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