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

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1999-2000 Ajuba Solutions.
  3. '"
  4. '" See the file "license.terms" for information on usage and redistribution
  5. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  6. '"
  7. '" RCS: @(#) $Id: ChnlStack.3,v 1.4.4.1 2004/07/16 20:10:58 andreas_kupries Exp $
  8. .so man.macros
  9. .TH Tcl_StackChannel 3 8.3 Tcl "Tcl Library Procedures"
  10. .BS
  11. '" Note:  do not modify the .SH NAME line immediately below!
  12. .SH NAME
  13. Tcl_StackChannel, Tcl_UnstackChannel, Tcl_GetStackedChannel, Tcl_GetTopChannel - stack an I/O channel on top of another, and undo it
  14. .SH SYNOPSIS
  15. .nf
  16. .nf
  17. fB#include <tcl.h>fR
  18. .sp
  19. Tcl_Channel
  20. fBTcl_StackChannelfR(fIinterp, typePtr, clientData, mask, channelfR)
  21. .sp
  22. int
  23. fBTcl_UnstackChannelfR(fIinterp, channelfR)
  24. .sp
  25. Tcl_Channel
  26. fBTcl_GetStackedChannelfR(fIchannelfR)
  27. .sp
  28. Tcl_Channel
  29. fBTcl_GetTopChannelfR(fIchannelfR)
  30. .sp
  31. .SH ARGUMENTS
  32. .AS Tcl_ChannelType
  33. .AP Tcl_Interp *interp in
  34. Interpreter for error reporting.
  35. .AP Tcl_ChannelType *typePtr in
  36. The new channel I/O procedures to use for fIchannelfP.
  37. .AP ClientData clientData in
  38. Arbitrary one-word value to pass to channel I/O procedures.
  39. .AP int mask in
  40. Conditions under which fIchannelfR will be used: OR-ed combination of
  41. fBTCL_READABLEfR, fBTCL_WRITABLEfR and fBTCL_EXCEPTIONfR.
  42. This can be a subset of the operations currently allowed on fIchannelfP.
  43. .AP Tcl_Channel channel in
  44. An existing Tcl channel such as returned by fBTcl_CreateChannelfR.
  45. .BE
  46. .SH DESCRIPTION
  47. .PP
  48. These functions are for use by extensions that add processing layers to Tcl
  49. I/O channels.  Examples include compression and encryption modules.  These
  50. functions transparently stack and unstack a new channel on top of an
  51. existing one.  Any number of channels can be stacked together.
  52. .PP
  53. The implementation of the Tcl channel code was rewritten in 8.3.2 to
  54. correct some problems with the previous implementation with regard to
  55. stacked channels.  Anyone using stacked channels or creating stacked
  56. channel drivers should update to the new fBTCL_CHANNEL_VERSION_2fR
  57. fBTcl_ChannelTypefR structure.  See fBTcl_CreateChannelfR for details.
  58. .PP
  59. fBTcl_StackChannelfR stacks a new fIchannelfP on an existing channel
  60. with the same name that was registered for fIchannelfP by
  61. fBTcl_RegisterChannelfP.
  62. .PP
  63. fBTcl_StackChannelfR works by creating a new channel structure and
  64. placing itself on top of the channel stack.  EOL translation, encoding and
  65. buffering options are shared between all channels in the stack.  The hidden
  66. channel does no buffering, newline translations, or character set encoding.
  67. Instead, the buffering, newline translations, and encoding functions all
  68. remain at the top of the channel stack.  A pointer to the new top channel
  69. structure is returned.  If an error occurs when stacking the channel, NULL
  70. is returned instead.
  71. .PP
  72. The fImaskfP parameter specifies the operations that are allowed on the
  73. new channel.  These can be a subset of the operations allowed on the
  74. original channel.  For example, a read-write channel may become read-only
  75. after the fBTcl_StackChannelfR call.
  76. .PP
  77. Closing a channel closes the channels stacked below it.  The close of
  78. stacked channels is executed in a way that allows buffered data to be
  79. properly flushed.
  80. .PP
  81. fBTcl_UnstackChannelfP reverses the process.  The old channel is
  82. associated with the channel name, and the processing module added by
  83. fBTcl_StackChannelfR is destroyed.  If there is no old channel, then
  84. fBTcl_UnstackChannelfP is equivalent to fBTcl_ClosefP.  If an error
  85. occurs unstacking the channel, fBTCL_ERRORfR is returned, otherwise
  86. fBTCL_OKfR is returned.
  87. .PP
  88. fBTcl_GetTopChannelfR returns the top channel in the stack of
  89. channels the supplied channel is part of.
  90. .PP
  91. fBTcl_GetStackedChannelfR returns the channel in the stack of
  92. channels which is just below the supplied channel.
  93. .SH "SEE ALSO"
  94. Notifier(3), Tcl_CreateChannel(3), Tcl_OpenFileChannel(3), vwait(n).
  95. .SH KEYWORDS
  96. channel, compression