# fflush

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           fflush — flush a stream
    


## SYNOPSIS



           #include <stdio.h>
    
           int fflush(FILE *_stream_);
    


## DESCRIPTION



           The functionality described on this reference page is aligned with
           the ISO C standard. Any conflict between the requirements
           described here and the ISO C standard is unintentional. This
           volume of POSIX.1‐2017 defers to the ISO C standard.
    
           If _stream_ points to an output stream or an update stream in which
           the most recent operation was not input, _fflush_() shall cause any
           unwritten data for that stream to be written to the file, and the
           last data modification and last file status change timestamps of
           the underlying file shall be marked for update.
    
           For a stream open for reading with an underlying file description,
           if the file is not already at EOF, and the file is one capable of
           seeking, the file offset of the underlying open file description
           shall be set to the file position of the stream, and any
           characters pushed back onto the stream by _ungetc_() or _ungetwc_()
           that have not subsequently been read from the stream shall be
           discarded (without further changing the file offset).
    
           If _stream_ is a null pointer, _fflush_() shall perform this flushing
           action on all streams for which the behavior is defined above.
    


## RETURN VALUE



           Upon successful completion, _fflush_() shall return 0; otherwise, it
           shall set the error indicator for the stream, return EOF, and set
           _errno_ to indicate the error.
    


## ERRORS



           The _fflush_() function shall fail if:
    
           **EAGAIN** The O_NONBLOCK flag is set for the file descriptor
                  underlying _stream_ and the thread would be delayed in the
                  write operation.
    
           **EBADF** The file descriptor underlying _stream_ is not valid.
    
           **EFBIG** An attempt was made to write a file that exceeds the
                  maximum file size.
    
           **EFBIG** An attempt was made to write a file that exceeds the file
                  size limit of the process.
    
           **EFBIG** The file is a regular file and an attempt was made to write
                  at or beyond the offset maximum associated with the
                  corresponding stream.
    
           **EINTR** The _fflush_() function was interrupted by a signal.
    
           **EIO** The process is a member of a background process group
                  attempting to write to its controlling terminal, TOSTOP is
                  set, the calling thread is not blocking SIGTTOU, the
                  process is not ignoring SIGTTOU, and the process group of
                  the process is orphaned.  This error may also be returned
                  under implementation-defined conditions.
    
           **ENOMEM** The underlying stream was created by _open_memstream_() or
                  _open_wmemstream_() and insufficient memory is available.
    
           **ENOSPC** There was no free space remaining on the device containing
                  the file or in the buffer used by the _fmemopen_() function.
    
           **EPIPE** An attempt is made to write to a pipe or FIFO that is not
                  open for reading by any process. A SIGPIPE signal shall
                  also be sent to the thread.
    
           The _fflush_() function may fail if:
    
           **ENXIO** A request was made of a nonexistent device, or the request
                  was outside the capabilities of the device.
    
           _The following sections are informative._
    


## EXAMPLES



       **Sending Prompts to Standard Output**
           The following example uses _printf_() calls to print a series of
           prompts for information the user must enter from standard input.
           The _fflush_() calls force the output to standard output. The
           _fflush_() function is used because standard output is usually
           buffered and the prompt may not immediately be printed on the
           output or terminal. The _getline_() function calls read strings from
           standard input and place the results in variables, for use later
           in the program.
    
               char *user;
               char *oldpasswd;
               char *newpasswd;
               ssize_t llen;
               size_t blen;
               struct termios term;
               tcflag_t saveflag;
    
               printf("User name: ");
               fflush(stdout);
               blen = 0;
               llen = getline(&user, &blen, stdin);
               user[llen-1] = 0;
               tcgetattr(fileno(stdin), &term);
               saveflag = term.c_lflag;
               term.c_lflag &= ~ECHO;
               tcsetattr(fileno(stdin), TCSANOW, &term);
               printf("Old password: ");
               fflush(stdout);
               blen = 0;
               llen = getline(&oldpasswd, &blen, stdin);
               oldpasswd[llen-1] = 0;
    
               printf("\nNew password: ");
               fflush(stdout);
               blen = 0;
               llen = getline(&newpasswd, &blen, stdin);
               newpasswd[llen-1] = 0;
               term.c_lflag = saveflag;
               tcsetattr(fileno(stdin), TCSANOW, &term);
               free(user);
               free(oldpasswd);
               free(newpasswd);
    


## APPLICATION USAGE



           None.
    


## RATIONALE



           Data buffered by the system may make determining the validity of
           the position of the current file descriptor impractical. Thus,
           enforcing the repositioning of the file descriptor after _fflush_()
           on streams open for _read_() is not mandated by POSIX.1‐2008.
    


## FUTURE DIRECTIONS



           None.
    


* * *