close(2) [freebsd man page]
CLOSE(2) BSD System Calls Manual CLOSE(2) NAME
close -- delete a descriptor LIBRARY
Standard C Library (libc, -lc) SYNOPSIS
#include <unistd.h> int close(int fd); DESCRIPTION
The close() system call deletes a descriptor from the per-process object reference table. If this is the last reference to the underlying object, the object will be deactivated. For example, on the last close of a file the current seek pointer associated with the file is lost; on the last close of a socket(2) associated naming information and queued data are discarded; on the last close of a file holding an advisory lock the lock is released (see further flock(2)). However, the semantics of System V and IEEE Std 1003.1-1988 (``POSIX.1'') dictate that all fcntl(2) advisory record locks associated with a file for a given process are removed when any file descriptor for that file is closed by that process. When a process exits, all associated file descriptors are freed, but since there is a limit on active descriptors per processes, the close() system call is useful when a large quantity of file descriptors are being handled. When a process forks (see fork(2)), all descriptors for the new child process reference the same objects as they did in the parent before the fork. If a new process is then to be run using execve(2), the process would normally inherit these descriptors. Most of the descriptors can be rearranged with dup2(2) or deleted with close() before the execve(2) is attempted, but if some of these descriptors will still be needed if the execve fails, it is necessary to arrange for them to be closed if the execve succeeds. For this reason, the call ``fcntl(d, F_SETFD, FD_CLOEXEC)'' is provided, which arranges that a descriptor will be closed after a successful execve; the call ``fcntl(d, F_SETFD, 0)'' restores the default, which is to not close the descriptor. RETURN VALUES
The close() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error. ERRORS
The close() system call will fail if: [EBADF] The fd argument is not an active descriptor. [EINTR] An interrupt was received. [ENOSPC] The underlying object did not fit, cached data was lost. [ECONNRESET] The underlying object was a stream socket that was shut down by the peer before all pending data was delivered. In case of any error except EBADF, the supplied file descriptor is deallocated and therefore is no longer valid. SEE ALSO
accept(2), closefrom(2), execve(2), fcntl(2), flock(2), open(2), pipe(2), socket(2), socketpair(2) STANDARDS
The close() system call is expected to conform to ISO/IEC 9945-1:1990 (``POSIX.1''). HISTORY
The close() function appeared in Version 7 AT&T UNIX. BSD
September 11, 2013 BSD
Check Out this Related Man Page
close(2) System Calls Manual close(2) Name close - delete a descriptor Syntax close(fd) int fd; Description 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. Return Values 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. Diagnostics 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 options. See Also accept(2), execve(2), fcntl(2), flock(2), fsync(2), open(2), pipe(2), socket(2), socketpair(2), write(2) close(2)