4.3BSD-UWisc/man/cat2/close.2
CLOSE(2) UNIX Programmer's Manual CLOSE(2)
NAME
close - delete a descriptor
SYNOPSIS
close(d)
int d;
DESCRIPTION
The _c_l_o_s_e call deletes a descriptor from the per-process
object reference table. If this is the last reference to
the underlying object, then it will be deactivated. For
example, on the last close of a file the current _s_e_e_k
pointer associated with the file is lost; on the last close
of a _s_o_c_k_e_t(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 _f_l_o_c_k(2)).
A close of all of a process's descriptors is automatic on
_e_x_i_t, but since there is a limit on the number of active
descriptors per process, _c_l_o_s_e is necessary for programs
that deal with many descriptors.
When a process forks (see _f_o_r_k(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 _e_x_e_c_v_e(2), the process would normally inherit
these descriptors. Most of the descriptors can be rear-
ranged with _d_u_p_2(2) or deleted with _c_l_o_s_e before the _e_x_e_c_v_e
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, 1)'' 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 VALUE
Upon successful completion, a value of 0 is returned. Oth-
erwise, a value of -1 is returned and the global integer
variable _e_r_r_n_o is set to indicate the error.
ERRORS
_C_l_o_s_e will fail if:
[EBADF] _D is not an active descriptor.
SEE ALSO
accept(2), flock(2), open(2), pipe(2), socket(2), socket-
pair(2), execve(2), fcntl(2)
Printed 12/27/86 May 22, 1986 1