close.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  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.4.8.1 2004/10/27 09:35:38 dkf 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 fIchannelIdfR
  18. .BE
  19. .SH DESCRIPTION
  20. .PP
  21. Closes the channel given by fIchannelIdfR.
  22. .PP
  23. .VS
  24. fIChannelIdfR must be an identifier for an open channel such as a
  25. Tcl standard channel (fBstdinfR, fBstdoutfR, or fBstderrfR),
  26. the return value from an invocation of fBopenfR or fBsocketfR, or
  27. the result of a channel creation command provided by a Tcl extension.
  28. .VE
  29. .PP
  30. All buffered output is flushed to the channel's output device,
  31. any buffered input is discarded, the underlying file or device is closed,
  32. and fIchannelIdfR becomes unavailable for use.
  33. .VS "" br
  34. .PP
  35. If the channel is blocking, the command does not return until all output
  36. is flushed.
  37. If the channel is nonblocking and there is unflushed output, the
  38. channel remains open and the command
  39. returns immediately; output will be flushed in the background and the
  40. channel will be closed when all the flushing is complete.
  41. .VE
  42. .PP
  43. If fIchannelIdfR is a blocking channel for a command pipeline then
  44. fBclosefR waits for the child processes to complete.
  45. .VS "" br
  46. .PP
  47. If the channel is shared between interpreters, then fBclosefR
  48. makes fIchannelIdfR unavailable in the invoking interpreter but has no
  49. other effect until all of the sharing interpreters have closed the
  50. channel.
  51. When the last interpreter in which the channel is registered invokes
  52. fBclosefR, the cleanup actions described above occur. See the
  53. fBinterpfR command for a description of channel sharing.
  54. .PP
  55. Channels are automatically closed when an interpreter is destroyed and
  56. when the process exits.  Channels are switched to blocking mode, to ensure
  57. that all output is correctly flushed before the process exits.
  58. .VE
  59. .PP
  60. The command returns an empty string, and may generate an error if
  61. an error occurs while flushing output.  If a command in a command
  62. pipeline created with fBopenfR returns an error, fBclosefR
  63. generates an error (similar to the fBexecfR command.)
  64. .SH EXAMPLE
  65. This illustrates how you can use Tcl to ensure that files get closed
  66. even when errors happen by combining fBcatchfR, fBclosefR and
  67. fBreturnfR:
  68. .CS
  69. proc withOpenFile {filename channelVar script} {
  70.     upvar 1 $channelVar chan
  71.     set chan [open $filename]
  72.     catch {
  73.         uplevel 1 $script
  74.     } result options
  75.     fBclosefR $chan
  76.     return -options $options $result
  77. }
  78. .CE
  79. .SH "SEE ALSO"
  80. file(n), open(n), socket(n), eof(n), Tcl_StandardChannels(3)
  81. .SH KEYWORDS
  82. blocking, channel, close, nonblocking