int
close(
int d
)
)
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
d
, F_SETFD
, 1
);
is provided,
which arranges that a descriptor
``d
''
will be closed after a successful
execve();
the system call
d
, F_SETFD
, 0
);
restores the default, which is to not close descriptor
``d
''.
)
will fail if:
EBADF
]
d
is not an active descriptor.
EINTR
]
)
function conforms to
ISO/IEC 9945-1:1990 (``POSIX.1'') .