Provided by: manpages-zh_1.5.2-1.1_all bug

NAME

       fileevent - 在一个通道变得可读或可写的时候执行一个脚本

总览 SYNOPSIS

       fileevent channelId readable ?script?

       fileevent channelId writable ?script?
_________________________________________________________________

描述 DESCRIPTION

       这个命令被用于建立文件事件处理器。一个文件事件处理器(handler)是在一个通道和一个脚本之间的
       一个绑定,这样在通道变得可读或可写的时候求这个脚本的值。通常使用文件事件处理器来允许在事件
       驱动的基础上从另一个进程接收数据,这样接受者可以在等待数据到来的时候继续与用户交互。如果一
       个应用在一个阻塞(模式下)的通道上调用 getsread,而此时没有可获得的数据,在输入数据到来之
       前,进程将被阻塞,它将不能服务于其他事件,所以对于用户它象是被“冷冻”了。使用 fileevent,进
       程可以在数据出现(present)的时候被告之,而只在不会导致阻塞的时候调用 getsread  。

       给 fileeventchannelId   参数参照一个打开的通道,比如从以前的 opensocket  命令的得到
       的返回值。如果指定了  script  参数,则 fileevent  建立一个新的事件处理器: 在通道变得可读或
       可写(依赖于给 fileevent 的第二个参数)的时候求 script  的值。在这种情况下 fileevent  返回一
       个空串。对于一个文件   readablewritable事件处理器是独立的,可以单独的建立和删除。但
       是,在一个特定的解释器中在一个特定的时间上对于一个文件最多只能有一个readable和一个
       writable  处理器。如果调用 fileevent而此时指定的处理器已经在调用的解释器中存在,新的脚本替
       换旧的那个。

       如果没有指定  script   参数,fileeventchannelId返回当前的脚本,如果没有则返回一个空
       串。如果  指定 script 参数为一个空串则删除这个事件处理器,如此将不会有脚本被调用。在一个通
       道被关闭或它的解释器被删除的时候文件的事件处理器也自动的被删除。

       如果在底层的设备上有可获得的未读的数据则把一个通道考虑为可读的。除了要从这个通道读的最近的
       尝试是不能在输入缓冲中找到一个完整的行的一个  gets  调用的特殊情况之外,如果在一个输入缓冲
       中有未读的数据也把一个通道考虑未可读的。这个特征允许使用事件从一个在非阻塞模式下的文件中一
       次读一行。如果在底层的文件或设备上有文件结束或出错的条件出现也把一个通道考虑为可读的。对于
       script  检查这些条件和正确的处理它们是很重要的;例如,如果没有对文件结束的特定检查,可能发
       生一个无限的循环,这里script  读不到数据,返回,立即重新调用。

       如果至少数据中有一字节可以写到底层文件或设备中而不阻塞,或者在底层的文件或设备上有错误的条
       件出现则把一个通道考虑为可写的。

       事件驱动 I/O 最好为使用 fconfigure  命令配置成非阻塞模式的通道工作。在阻塞模式下,如果你给
       它的数据比底层文件或数据可接受的多,则   puts   命令将阻塞,而如果你读的数据比已经准备好的
       多,则getsread 命令将阻塞;在命令阻塞时不处理事件。在非阻塞模式下,putsreadgets从
       不阻塞。参见这些单独命令的文档来得到关于它们如何处理阻塞和非阻塞通道的信息。

       给一个文件事件的脚本在调用fileevent   命令的解释器的全局的层次上执行(在任何 Tcl 过程的上下
       文之外)。如果在执行脚本期间发生了错误则使用 bgerror 机制来报告错误。额外的,如果一个事件处
       理器曾经返回错误则删除它;目的是防止缺陷很多的处理器导致无限循环。

感谢 CREDITS

       fileevent  基于由 Mark Diekhans 建立的 addinput  命令。

参见 SEE ALSO

       bgerror(n), fconfigure(n), gets(n), puts(n), read(n)

关键字 KEYWORDS

       asynchronous  I/O,  blocking,  channel,  event  handler,  nonblocking,  readable,  script,
       writable.

[中文版维护人]

       寒蝉退士

[中文版最新更新]

       2001/08/13

《中国 Linux 论坛 man 手册页翻译计划》:

       http://cmpp.linuxforum.net