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

通讯编程

开发平台:

Visual C++

  1. '" 
  2. '" Copyright (c) 1995-1996 Sun Microsystems, Inc.
  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: fconfigure.n,v 1.7.2.3 2006/03/14 22:51:13 andreas_kupries Exp $
  8. '"
  9. .so man.macros
  10. .TH fconfigure n 8.3 Tcl "Tcl Built-In Commands"
  11. .BS
  12. '" Note:  do not modify the .SH NAME line immediately below!
  13. .SH NAME
  14. fconfigure - Set and get options on a channel
  15. .SH SYNOPSIS
  16. .nf
  17. fBfconfigure fIchannelIdfR
  18. fBfconfigure fIchannelIdfR fInamefR
  19. fBfconfigure fIchannelIdfR fIname value fR?fIname value ...fR?
  20. .fi
  21. .BE
  22. .SH DESCRIPTION
  23. .PP
  24. The fBfconfigurefR command sets and retrieves options for channels.
  25. .PP
  26. fIChannelIdfR identifies the channel for which to set or query an
  27. option and must refer to an open channel such as a Tcl standard
  28. channel (fBstdinfR, fBstdoutfR, or fBstderrfR), the return
  29. value from an invocation of fBopenfR or fBsocketfR, or the result
  30. of a channel creation command provided by a Tcl extension.
  31. .PP
  32. If no fInamefR or fIvaluefR arguments are supplied, the command
  33. returns a list containing alternating option names and values for the channel.
  34. If fInamefR is supplied but no fIvaluefR then the command returns
  35. the current value of the given option.
  36. If one or more pairs of fInamefR and fIvaluefR are supplied, the
  37. command sets each of the named options to the corresponding fIvaluefR;
  38. in this case the return value is an empty string.
  39. .PP
  40. The options described below are supported for all channels. In addition,
  41. each channel type may add options that only it supports. See the manual
  42. entry for the command that creates each type of channels for the options
  43. that that specific type of channel supports. For example, see the manual
  44. entry for the fBsocketfR command for its additional options.
  45. .TP
  46. fB-blockingfR fIbooleanfR
  47. The fB-blockingfR option determines whether I/O operations on the
  48. channel can cause the process to block indefinitely.
  49. The value of the option must be a proper boolean value.
  50. Channels are normally in blocking mode;  if a channel is placed into
  51. nonblocking mode it will affect the operation of the fBgetsfR,
  52. fBreadfR, fBputsfR, fBflushfR, and fBclosefR commands;
  53. see the documentation for those commands for details.
  54. For nonblocking mode to work correctly, the application must be
  55. using the Tcl event loop (e.g. by calling fBTcl_DoOneEventfR or
  56. invoking the fBvwaitfR command).
  57. .TP
  58. fB-bufferingfR fInewValuefR
  59. .
  60. If fInewValuefR is fBfullfR then the I/O system will buffer output
  61. until its internal buffer is full or until the fBflushfR command is
  62. invoked. If fInewValuefR is fBlinefR, then the I/O system will
  63. automatically flush output for the channel whenever a newline character
  64. is output. If fInewValuefR is fBnonefR, the I/O system will flush
  65. automatically after every output operation.  The default is for
  66. fB-bufferingfR to be set to fBfullfR except for channels that
  67. connect to terminal-like devices; for these channels the initial setting
  68. is fBlinefR.  Additionally, fBstdinfR and fBstdoutfR are
  69. initially set to fBlinefR, and fBstderrfR is set to fBnonefR.
  70. .TP
  71. fB-buffersizefR fInewSizefR
  72. .
  73. fINewvaluefR must be an integer; its value is used to set the size of
  74. buffers, in bytes, subsequently allocated for this channel to store input
  75. or output. fINewvaluefR must be between ten and one million, allowing
  76. buffers of ten to one million bytes in size.
  77. .TP
  78. fB-encodingfR fInamefR
  79. .
  80. This option is used to specify the encoding of the channel, so that the data
  81. can be converted to and from Unicode for use in Tcl.  For instance, in
  82. order for Tcl to read characters from a Japanese file in fBshiftjisfR
  83. and properly process and display the contents, the encoding would be set
  84. to fBshiftjisfR.  Thereafter, when reading from the channel, the bytes in
  85. the Japanese file would be converted to Unicode as they are read.
  86. Writing is also supported - as Tcl strings are written to the channel they
  87. will automatically be converted to the specified encoding on output.
  88. .RS
  89. .PP
  90. If a file contains pure binary data (for instance, a JPEG image), the
  91. encoding for the channel should be configured to be fBbinaryfR.  Tcl
  92. will then assign no interpretation to the data in the file and simply read or
  93. write raw bytes.  The Tcl fBbinaryfR command can be used to manipulate this
  94. byte-oriented data.
  95. .PP
  96. The default encoding for newly opened channels is the same platform- and
  97. locale-dependent system encoding used for interfacing with the operating
  98. system.  
  99. .RE
  100. .TP
  101. fB-eofcharfR fIcharfR
  102. .TP
  103. fB-eofcharfR fB{fIinChar outCharfB}fR
  104. .
  105. This option supports DOS file systems that use Control-z (ex1a) as an
  106. end of file marker.  If fIcharfR is not an empty string, then this
  107. character signals end-of-file when it is encountered during input.  For
  108. output, the end-of-file character is output when the channel is closed.
  109. If fIcharfR is the empty string, then there is no special end of file
  110. character marker.  For read-write channels, a two-element list specifies
  111. the end of file marker for input and output, respectively.  As a
  112. convenience, when setting the end-of-file character for a read-write
  113. channel you can specify a single value that will apply to both reading
  114. and writing.  When querying the end-of-file character of a read-write
  115. channel, a two-element list will always be returned.  The default value
  116. for fB-eofcharfR is the empty string in all cases except for files
  117. under Windows.  In that case the fB-eofcharfR is Control-z (ex1a) for
  118. reading and the empty string for writing.
  119. .TP
  120. fB-translationfR fImodefR
  121. .TP
  122. fB-translationfR fB{fIinMode outModefB}fR 
  123. .
  124. In Tcl scripts the end of a line is always represented using a single
  125. newline character (en).  However, in actual files and devices the end of
  126. a line may be represented differently on different platforms, or even for
  127. different devices on the same platform.  For example, under UNIX newlines
  128. are used in files, whereas carriage-return-linefeed sequences are
  129. normally used in network connections.  On input (i.e., with fBgetsfP
  130. and fBreadfP) the Tcl I/O system automatically translates the external
  131. end-of-line representation into newline characters.  Upon output (i.e.,
  132. with fBputsfP), the I/O system translates newlines to the external
  133. end-of-line representation.  The default translation mode, fBautofP,
  134. handles all the common cases automatically, but the fB-translationfR
  135. option provides explicit control over the end of line translations.
  136. .RS
  137. .PP
  138. The value associated with fB-translationfR is a single item for
  139. read-only and write-only channels.  The value is a two-element list for
  140. read-write channels; the read translation mode is the first element of
  141. the list, and the write translation mode is the second element.  As a
  142. convenience, when setting the translation mode for a read-write channel
  143. you can specify a single value that will apply to both reading and
  144. writing.  When querying the translation mode of a read-write channel, a
  145. two-element list will always be returned.  The following values are
  146. currently supported:
  147. .TP
  148. fBautofR
  149. .
  150. As the input translation mode, fBautofR treats any of newline
  151. (fBlffP), carriage return (fBcrfP), or carriage return followed by a
  152. newline (fBcrlffP) as the end of line representation.  The end of line
  153. representation can even change from line-to-line, and all cases are
  154. translated to a newline.  As the output translation mode, fBautofR
  155. chooses a platform specific representation; for sockets on all platforms
  156. Tcl chooses fBcrlffR, for all Unix flavors, it chooses fBlffR, for the
  157. Macintosh platform it chooses fBcrfR and for the various flavors of
  158. Windows it chooses fBcrlffR.  The default setting for
  159. fB-translationfR is fBautofR for both input and output.
  160. .TP
  161. fBbinaryfR 
  162. .
  163. No end-of-line translations are performed.  This is nearly identical to
  164. fBlffP mode, except that in addition fBbinaryfP mode also sets the
  165. end-of-file character to the empty string (which disables it) and sets the
  166. encoding to fBbinaryfR (which disables encoding filtering).  See the
  167. description of fB-eofcharfR and fB-encodingfR for more information.
  168. .PP
  169. .RS
  170. Internally, i.e. when it comes to the actual behaviour of the
  171. translator this value fBisfR identical to fBlffR and is therefore
  172. reported as such when queried. Even if fBbinaryfR was used to set
  173. the translation.
  174. .RE
  175. .TP
  176. fBcrfR
  177. .
  178. The end of a line in the underlying file or device is represented by a
  179. single carriage return character.  As the input translation mode,
  180. fBcrfP mode converts carriage returns to newline characters.  As the
  181. output translation mode, fBcrfP mode translates newline characters to
  182. carriage returns.  This mode is typically used on Macintosh platforms.
  183. .TP
  184. fBcrlffR
  185. .
  186. The end of a line in the underlying file or device is represented by a
  187. carriage return character followed by a linefeed character.  As the input
  188. translation mode, fBcrlffP mode converts carriage-return-linefeed
  189. sequences to newline characters.  As the output translation mode,
  190. fBcrlffP mode translates newline characters to carriage-return-linefeed
  191. sequences.  This mode is typically used on Windows platforms and for
  192. network connections.
  193. .TP
  194. fBlffR
  195. .
  196. The end of a line in the underlying file or device is represented by a
  197. single newline (linefeed) character.  In this mode no translations occur
  198. during either input or output.  This mode is typically used on UNIX
  199. platforms.
  200. .RE
  201. .PP
  202. .SH "STANDARD CHANNELS"
  203. .PP
  204. The Tcl standard channels (fBstdinfR, fBstdoutfR, and fBstderrfR)
  205. can be configured through this command like every other channel opened
  206. by the Tcl library. Beyond the standard options described above they
  207. will also support any special option according to their current type.
  208. If, for example, a Tcl application is started by the fBinetfR
  209. super-server common on Unix system its Tcl standard channels will be
  210. sockets and thus support the socket options.
  211. .SH EXAMPLES
  212. Instruct Tcl to always send output to fBstdoutfR immediately,
  213. whether or not it is to a terminal:
  214. .CS
  215. fBfconfigurefR stdout -buffering none
  216. .CE
  217. .PP
  218. Open a socket and read lines from it without ever blocking the
  219. processing of other events:
  220. .CS
  221. set s [socket some.where.com 12345]
  222. fBfconfigurefR $s -blocking 0
  223. fileevent $s readable "readMe $s"
  224. proc readMe chan {
  225.    if {[gets $chan line] < 0} {
  226.       if {[eof $chan]} {
  227.          close $chan
  228.          return
  229.       }
  230.       # Could not read a complete line this time; Tcl's
  231.       # internal buffering will hold the partial line for us
  232.       # until some more data is available over the socket.
  233.    } else {
  234.       puts stdout $line
  235.    }
  236. }
  237. .CE
  238. .PP
  239. Read a PPM-format image from a file:
  240. .CS
  241. # Open the file and put it into Unix ASCII mode
  242. set f [open teapot.ppm]
  243. fBfconfigurefR $f -encoding ascii -translation lf
  244. # Get the header
  245. if {[gets $f] ne "P6"} {
  246.    error "not a raw-bits PPM"
  247. }
  248. # Read lines until we have got non-comment lines
  249. # that supply us with three decimal values.
  250. set words {}
  251. while {[llength $words] < 3} {
  252.    gets $f line
  253.    if {[string match "#*" $line]} continue
  254.    lappend words [eval concat [scan $line %d%d%d]]
  255. }
  256. # Those words supply the size of the image and its
  257. # overall depth per channel. Assign to variables.
  258. foreach {xSize ySize depth} $words {break}
  259. # Now switch to binary mode to pull in the data,
  260. # one byte per channel (red,green,blue) per pixel.
  261. fBfconfigurefR $f -translation binary
  262. set numDataBytes [expr {3 * $xSize * $ySize}]
  263. set data [read $f $numDataBytes]
  264. close $f
  265. .CE
  266. .SH "SEE ALSO"
  267. close(n), flush(n), gets(n), open(n), puts(n), read(n), socket(n),
  268. Tcl_StandardChannels(3)
  269. .SH KEYWORDS
  270. blocking, buffering, carriage return, end of line, flushing, linemode,
  271. newline, nonblocking, platform, translation, encoding, filter, byte array,
  272. binary