CLOSE(2) | System Calls Manual | CLOSE(2)

# NAME

`close` —
delete a descriptor

# LIBRARY

Standard C Library (libc, -lc)

# SYNOPSIS

`#include <unistd.h>`

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 IEEE Std 1003.1-1990 (“POSIX.1”).

# HISTORY

The `close`() function appeared in Version 1 AT&T UNIX.

September 1, 2019 | NetBSD 9.4