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 11/26/99 May 22, 1986 1