.\" Copyright (c) 1990, 1991 The Regents of the University of California.
.\" All rights reserved.
.\"
.\" This code is derived from software contributed to Berkeley by
.\" Chris Torek and the American National Standards Committee X3,
.\" on Information Processing Systems.
.\"
.\" %%%LICENSE_START(BSD_4_CLAUSE_UCB)
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\"    must display the following acknowledgement:
.\"	This product includes software developed by the University of
.\"	California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\"    may be used to endorse or promote products derived from this software
.\"    without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\" %%%LICENSE_END
.\"
.\"     @(#)fclose.3	6.7 (Berkeley) 6/29/91
.\"
.\" Converted for Linux, Mon Nov 29 15:19:14 1993, faith@cs.unc.edu
.\"
.\" Modified 2000-07-22 by Nicolás Lichtmaier <nick@debian.org>
.\"
.TH FCLOSE 3  2016-12-12 "GNU" "Linux Programmer's Manual"
.SH NAME
fclose \- close a stream
.SH SYNOPSIS
.B #include <stdio.h>
.PP
.BI "int fclose(FILE *" stream );
.SH DESCRIPTION
The
.BR fclose ()
function flushes the stream pointed to by
.I stream
(writing any buffered output data using
.BR fflush (3))
and closes the underlying file descriptor.
.SH RETURN VALUE
Upon successful completion, 0 is returned.
Otherwise,
.B EOF
is returned and
.I errno
is set to indicate the error.
In either case, any further access
(including another call to
.BR fclose ())
to the stream results in undefined behavior.
.SH ERRORS
.TP
.B EBADF
The file descriptor underlying
.I stream
is not valid.
.\"  This error cannot occur unless you are mixing ANSI C stdio operations and
.\"  low-level file operations on the same stream. If you do get this error,
.\"  you must have closed the stream's low-level file descriptor using
.\"  something like close(fileno(stream)).
.PP
The
.BR fclose ()
function may also fail and set
.I errno
for any of the errors specified for the routines
.BR close (2),
.BR write (2),
or
.BR fflush (3).
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.TS
allbox;
lb lb lb
l l l.
Interface	Attribute	Value
T{
.BR fclose ()
T}	Thread safety	MT-Safe
.TE
.SH CONFORMING TO
POSIX.1-2001, POSIX.1-2008, C89, C99.
.SH NOTES
Note that
.BR fclose ()
flushes only the user-space buffers provided by the
C library.
To ensure that the data is physically stored
on disk the kernel buffers must be flushed too, for example, with
.BR sync (2)
or
.BR fsync (2).
.SH SEE ALSO
.BR close (2),
.BR fcloseall (3),
.BR fflush (3),
.BR fileno (3),
.BR fopen (3),
.BR setbuf (3)
