fclose - close a stream
int fclose(FILE *stream);
The fclose() function causes the stream pointed to by stream
to be flushed and the associated file to be closed. Any
unwritten buffered data for the stream is written to the
file; any unread buffered data is discarded. The stream is
disassociated from the file. If the associated buffer was
automatically allocated, it is deallocated.
The fclose() function marks for update the st_ctime and
st_mtime fields of the underlying file if the stream is
writable and if buffered data has not yet been written to
the file. It will perform a close(2) operation on the file
descriptor that is associated with the stream pointed to by
After the call to fclose(), any use of stream causes unde-
The fclose() function is performed automatically for all
open files upon calling exit(2).
Upon successful completion, fclose() returns 0. Otherwise,
it returns EOF and sets errno to indicate the error.
The fclose() function will fail if:
The O_NONBLOCK flag is set for the file descriptor
underlying stream and the process 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 or the process's file size limit; or
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 fclose() function was interrupted by a signal.
EIO The process is a member of a background process group
attempting to write to its controlling terminal, TOS-
TOP is set, the process is neither ignoring nor block-
ing SIGTTOU and the process group of the process is
There was no free space remaining on the device con-
taining the file.
EPIPE An attempt is made to write to a pipe or FIFO that is
not open for reading by any process. A SIGPIPE signal
will also be sent to the process.
The fclose() function may fail if:
ENXIO A request was made of a non-existent device, or the
request was beyond the limits of the device.
When a UFS file system is mounted with logging enabled, file
system transactions that free blocks from files might not
actually add those freed blocks to the file system's free
list until some unspecified time in the future. This
behavior improves file system performance but does not con-
form to the POSIX, Single UNIX Specification, SPARC Confor-
mance Definition, System V Application Binary Interface,
System V Interface Definition, and X/Open Portability Guide
Standards, which require that freed space be available
immediately. To enable standards conformance regarding file
deletions or to address the problem of not being able to
grow files on a relatively full UFS file system even after
files have been deleted, disable UFS logging (see
See attributes(5) for descriptions of the following attri-
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
| MT-Level | MT-Safe |
mount_ufs(1M), close(2), exit(2), getrlimit(2), ulimit(2),
fopen(3C), stdio(3C), attributes(5)
Man(1) output converted with