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

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1994 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: fileevent.n,v 1.5.6.1 2004/10/27 12:52:40 dkf Exp $
  9. '" 
  10. .so man.macros
  11. .TH fileevent 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. fileevent - Execute a script when a channel becomes readable or writable
  16. .SH SYNOPSIS
  17. fBfileevent fIchannelId fBreadable fR?fIscriptfR?
  18. .sp
  19. fBfileevent fIchannelId fBwritable fR?fIscriptfR?
  20. .BE
  21. .SH DESCRIPTION
  22. .PP
  23. This command is used to create fIfile event handlersfR.  A file event
  24. handler is a binding between a channel and a script, such that the script
  25. is evaluated whenever the channel becomes readable or writable.  File event
  26. handlers are most commonly used to allow data to be received from another
  27. process on an event-driven basis, so that the receiver can continue to
  28. interact with the user while waiting for the data to arrive.  If an
  29. application invokes fBgetsfR or fBreadfR on a blocking channel when
  30. there is no input data available, the process will block; until the input
  31. data arrives, it will not be able to service other events, so it will
  32. appear to the user to ``freeze up''.  With fBfileeventfR, the process can
  33. tell when data is present and only invoke fBgetsfR or fBreadfR when
  34. they won't block.
  35. .PP
  36. .VS
  37. The fIchannelIdfR argument to fBfileeventfR refers to an open
  38. channel such as a Tcl standard channel (fBstdinfR, fBstdoutfR,
  39. or fBstderrfR), the return value from an invocation of fBopenfR
  40. or fBsocketfR, or the result of a channel creation command provided
  41. by a Tcl extension.
  42. .VE
  43. .PP
  44. If the fIscriptfR argument is specified, then fBfileeventfR
  45. creates a new event handler:  fIscriptfR will be evaluated
  46. whenever the channel becomes readable or writable (depending on the
  47. second argument to fBfileeventfR).
  48. In this case fBfileeventfR returns an empty string.
  49. The fBreadablefR and fBwritablefR event handlers for a file
  50. are independent, and may be created and deleted separately.
  51. However, there may be at most one fBreadablefR and one fBwritablefR
  52. handler for a file at a given time in a given interpreter.
  53. If fBfileeventfR is called when the specified handler already
  54. exists in the invoking interpreter, the new script replaces the old one.
  55. .PP
  56. If the fIscriptfR argument is not specified, fBfileeventfR
  57. returns the current script for fIchannelIdfR, or an empty string
  58. if there is none.
  59. If the fIscriptfR argument is specified as an empty string
  60. then the event handler is deleted, so that no script will be invoked.
  61. A file event handler is also deleted automatically whenever
  62. its channel is closed or its interpreter is deleted.
  63. .PP
  64. A channel is considered to be readable if there is unread data
  65. available on the underlying device.
  66. A channel is also considered to be readable if there is unread
  67. data in an input buffer, except in the special case where the
  68. most recent attempt to read from the channel was a fBgetsfR
  69. call that could not find a complete line in the input buffer.
  70. This feature allows a file to be read a line at a time in nonblocking mode
  71. using events.
  72. A channel is also considered to be readable if an end of file or
  73. error condition is present on the underlying file or device.
  74. It is important for fIscriptfR to check for these conditions
  75. and handle them appropriately;  for example, if there is no special
  76. check for end of file, an infinite loop may occur where fIscriptfR
  77. reads no data, returns, and is immediately invoked again.
  78. .PP
  79. A channel is considered to be writable if at least one byte of data
  80. can be written to the underlying file or device without blocking,
  81. or if an error condition is present on the underlying file or device.
  82. .PP
  83. Event-driven I/O works best for channels that have been
  84. placed into nonblocking mode with the fBfconfigurefR command.
  85. In blocking mode, a fBputsfR command may block if you give it
  86. more data than the underlying file or device can accept, and a
  87. fBgetsfR or fBreadfR command will block if you attempt to read
  88. more data than is ready;  no events will be processed while the
  89. commands block.
  90. In nonblocking mode fBputsfR, fBreadfR, and fBgetsfR never block.
  91. See the documentation for the individual commands for information
  92. on how they handle blocking and nonblocking channels.
  93. .PP
  94. The script for a file event is executed at global level (outside the
  95. context of any Tcl procedure) in the interpreter in which the
  96. fBfileeventfR command was invoked.
  97. If an error occurs while executing the script then the
  98. fBbgerrorfR mechanism is used to report the error.
  99. In addition, the file event handler is deleted if it ever returns
  100. an error;  this is done in order to prevent infinite loops due to
  101. buggy handlers.
  102. .SH EXAMPLE
  103. In this setup fBGetDatafR will be called with the channel as an
  104. argument whenever $chan becomes readable.
  105. .CS
  106. proc GetData {chan} {
  107.     if {![eof $chan]} {
  108.         puts [gets $chan]
  109.     }
  110. }
  111. fBfileeventfR $chan readable [list GetData $chan]
  112. .CE
  113. .SH CREDITS
  114. .PP
  115. fBfileeventfR is based on the fBaddinputfR command created
  116. by Mark Diekhans.
  117. .SH "SEE ALSO"
  118. bgerror(n), fconfigure(n), gets(n), puts(n), read(n), Tcl_StandardChannels(3)
  119. .SH KEYWORDS
  120. asynchronous I/O, blocking, channel, event handler, nonblocking, readable,
  121. script, writable.