|
|
1.1 ! root 1: .\" Copyright (c) 1980 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)close.2 6.3 (Berkeley) 5/22/86 ! 6: .\" ! 7: .TH CLOSE 2 "May 22, 1986" ! 8: .UC 4 ! 9: .SH NAME ! 10: close \- delete a descriptor ! 11: .SH SYNOPSIS ! 12: .B close(d) ! 13: .br ! 14: .B "int d;" ! 15: .SH DESCRIPTION ! 16: The ! 17: \fIclose\fP call deletes a descriptor from the per-process object ! 18: reference table. ! 19: If this is the last reference to the underlying object, then ! 20: it will be deactivated. ! 21: For example, on the last close of a file ! 22: the current \fIseek\fP pointer associated with the file is lost; ! 23: on the last close of a ! 24: .IR socket (2) ! 25: associated naming information and queued data are discarded; ! 26: on the last close of a file holding an advisory lock ! 27: the lock is released (see further ! 28: .IR flock (2)\fR). ! 29: .PP ! 30: A close of all of a process's descriptors is automatic on ! 31: .IR exit , ! 32: but since ! 33: there is a limit on the number of active descriptors per process, ! 34: .I close ! 35: is necessary for programs that deal with many descriptors. ! 36: .PP ! 37: When a process forks (see ! 38: .IR fork (2)), ! 39: all descriptors for the new child process reference the same ! 40: objects as they did in the parent before the fork. ! 41: If a new process is then to be run using ! 42: .IR execve (2), ! 43: the process would normally inherit these descriptors. Most ! 44: of the descriptors can be rearranged with ! 45: .IR dup2 (2) ! 46: or deleted with ! 47: .I close ! 48: before the ! 49: .I execve ! 50: is attempted, but if some of these descriptors will still ! 51: be needed if the execve fails, it is necessary to arrange for them ! 52: to be closed if the execve succeeds. ! 53: For this reason, the call ``fcntl(d, F_SETFD, 1)'' is provided, ! 54: which arranges that a descriptor will be closed after a successful ! 55: execve; the call ``fcntl(d, F_SETFD, 0)'' restores the default, ! 56: which is to not close the descriptor. ! 57: .SH "RETURN VALUE ! 58: Upon successful completion, a value of 0 is returned. ! 59: Otherwise, a value of \-1 is returned and the global integer variable ! 60: .I errno ! 61: is set to indicate the error. ! 62: .SH ERRORS ! 63: .I Close ! 64: will fail if: ! 65: .TP 15 ! 66: [EBADF] ! 67: \fID\fP is not an active descriptor. ! 68: .SH "SEE ALSO" ! 69: accept(2), flock(2), open(2), pipe(2), socket(2), socketpair(2), ! 70: execve(2), fcntl(2)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.