1 | '\" |
---|
2 | '\" Copyright (c) 1993 The Regents of the University of California. |
---|
3 | '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. |
---|
4 | '\" |
---|
5 | '\" See the file "license.terms" for information on usage and redistribution |
---|
6 | '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. |
---|
7 | '\" |
---|
8 | '\" RCS: @(#) $Id: close.n,v 1.13 2007/12/13 15:22:32 dgp Exp $ |
---|
9 | '\" |
---|
10 | .so man.macros |
---|
11 | .TH close n 7.5 Tcl "Tcl Built-In Commands" |
---|
12 | .BS |
---|
13 | '\" Note: do not modify the .SH NAME line immediately below! |
---|
14 | .SH NAME |
---|
15 | close \- Close an open channel |
---|
16 | .SH SYNOPSIS |
---|
17 | \fBclose \fIchannelId\fR |
---|
18 | .BE |
---|
19 | |
---|
20 | .SH DESCRIPTION |
---|
21 | .PP |
---|
22 | Closes the channel given by \fIchannelId\fR. |
---|
23 | .PP |
---|
24 | \fIChannelId\fR must be an identifier for an open channel such as a |
---|
25 | Tcl standard channel (\fBstdin\fR, \fBstdout\fR, or \fBstderr\fR), |
---|
26 | the return value from an invocation of \fBopen\fR or \fBsocket\fR, or |
---|
27 | the result of a channel creation command provided by a Tcl extension. |
---|
28 | .PP |
---|
29 | All buffered output is flushed to the channel's output device, |
---|
30 | any buffered input is discarded, the underlying file or device is closed, |
---|
31 | and \fIchannelId\fR becomes unavailable for use. |
---|
32 | .PP |
---|
33 | If the channel is blocking, the command does not return until all output |
---|
34 | is flushed. |
---|
35 | If the channel is nonblocking and there is unflushed output, the |
---|
36 | channel remains open and the command |
---|
37 | returns immediately; output will be flushed in the background and the |
---|
38 | channel will be closed when all the flushing is complete. |
---|
39 | .PP |
---|
40 | If \fIchannelId\fR is a blocking channel for a command pipeline then |
---|
41 | \fBclose\fR waits for the child processes to complete. |
---|
42 | .PP |
---|
43 | If the channel is shared between interpreters, then \fBclose\fR |
---|
44 | makes \fIchannelId\fR unavailable in the invoking interpreter but has no |
---|
45 | other effect until all of the sharing interpreters have closed the |
---|
46 | channel. |
---|
47 | When the last interpreter in which the channel is registered invokes |
---|
48 | \fBclose\fR, the cleanup actions described above occur. See the |
---|
49 | \fBinterp\fR command for a description of channel sharing. |
---|
50 | .PP |
---|
51 | Channels are automatically closed when an interpreter is destroyed and |
---|
52 | when the process exits. Channels are switched to blocking mode, to ensure |
---|
53 | that all output is correctly flushed before the process exits. |
---|
54 | .PP |
---|
55 | The command returns an empty string, and may generate an error if |
---|
56 | an error occurs while flushing output. If a command in a command |
---|
57 | pipeline created with \fBopen\fR returns an error, \fBclose\fR |
---|
58 | generates an error (similar to the \fBexec\fR command.) |
---|
59 | .SH EXAMPLE |
---|
60 | This illustrates how you can use Tcl to ensure that files get closed |
---|
61 | even when errors happen by combining \fBcatch\fR, \fBclose\fR and |
---|
62 | \fBreturn\fR: |
---|
63 | .CS |
---|
64 | proc withOpenFile {filename channelVar script} { |
---|
65 | upvar 1 $channelVar chan |
---|
66 | set chan [open $filename] |
---|
67 | catch { |
---|
68 | uplevel 1 $script |
---|
69 | } result options |
---|
70 | \fBclose\fR $chan |
---|
71 | return -options $options $result |
---|
72 | } |
---|
73 | .CE |
---|
74 | |
---|
75 | .SH "SEE ALSO" |
---|
76 | file(n), open(n), socket(n), eof(n), Tcl_StandardChannels(3) |
---|
77 | |
---|
78 | .SH KEYWORDS |
---|
79 | blocking, channel, close, nonblocking |
---|