close(2) System Calls Manual close(2)
close - delete a descriptor
The call deletes a descriptor from the per-process object reference table. If the descriptor is the last reference to the underlying
object, then the object is deactivated. For example, on the last close of a file, the current pointer associated with the file is lost.
On the last close of a socket, discards associated naming information and queued data. On the last close of a file holding an advisory
lock, the lock is released. For further information, see
A process's descriptors are automatically closed when a process exits, but because each process can have a limited number of active
descriptors, is necessary for programs that deal with many descriptors.
When a process forks, all descriptors for the new child process reference the same objects as they did in the parent process before the
fork. For further information, see If a new process is then to be run using the process would normally inherit these descriptors. Most of
the descriptors can be rearranged with the system call or deleted with before is called. However, if any descriptors are needed if the
fails, they must be closed if the execve succeeds. For this reason, the call, fcntl(d, F_SETFD, 1), is provided. This call arranges that a
descriptor is closed after a successful call. The call, fcntl(d, F_SETFD, 0), restores the default, which is to not close the descriptor.
When is used on a descriptor that refers to a remote file over NFS, and that file has been modified by using then any cached data is
flushed before returns. If an asynchronous write error has occurred previously with this remote file, or occurred as part of the flush
operation described above, then returns -1 and errno will be set to the error code. The return code from should be inspected by any program
that can over NFS.
Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned, and the global integer variable, errno, is set
to indicate the error.
The system call fails under the following conditions:
[EBADF] D is not an active descriptor.
[EINTR] The function was interrupted by a signal.
If an error occurs on an asynchronous write over NFS, the error cannot always be returned from a system call. The error code is returned
on or The following are NFS-only error messages:
[EACCESS] The requested address is protected, and the current user has inadequate permission to access it.
[ENOSPC] There is no free space remaining on the file system containing the file.
[EDQUOT] The user's quota of disk blocks on the file system containing the file has been exhausted.
[EIO] An I/O error occurred while reading from or writing to the file system.
[EROFS] The file is on a read-only file system.
[ESTALE] The fd argument is invalid because the file referred to by that file handle no longer exists or has been revoked.
[ETIMEDOUT] A write operation failed because the server did not properly respond after a period of time that is dependent on the
accept(2), execve(2), fcntl(2), flock(2), fsync(2), open(2), pipe(2), socket(2), socketpair(2), write(2)