April 19, 1994 CLOSE 2

### NAME

close - delete a descriptor

### LIBRARY

Standard C Library (libc, -lc)

### SYNOPSIS

```int` close(```int d`)

### 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 flock(2)).

When a process exits, all associated 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 calls 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(``) 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 only if the execve(``) succeeds. For this reason, the system call

  fcntl(```d``, F_SETFD``, 1`);

is provided, which arranges that a descriptor `````d`'' will be closed after a successful execve(``); the system call

  fcntl(```d``, F_SETFD``, 0`);

restores the default, which is to not close descriptor `````d`''.

### RETURN VALUES

Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned and errno is set to indicate the error.

### ERRORS

close(``) will fail if:

[```EBADF`]
  ```d` is not an active descriptor.

[```EINTR`]
  An interrupt was received.

### SEE ALSO

accept(2), execve(2), fcntl(2), flock(2), open(2), pipe(2), socket(2), socketpair(2)

### STANDARDS

The close(``) function conforms to ISO/IEC 9945-1:1990 (``POSIX.1'') .