Provided by:
manpages-zh_1.5.1-1_all 
NAME
fileevent - 在一茬q道變得可讀或可寫的時埶鶡璊@蚑Z本
` SYNOPSIS
fileevent channelId readable ?script?
fileevent channelId writable ?script?
_________________________________________________________________
yz DESCRIPTION
這茤R令被用於建立Bz飽C一蚗仵蚳馧B理器(handler)是在一-
茬q道和一蚑Z本之間的一虒j定,這樣在通道變得可讀或可寫的時唻D這蚑Z本的-
C通常使用檔案事件處理器來允釵b事件驅動的基礎上從另一-
荈i程接收數據,這樣接受者可以在等待數據到來的時-
堐~續與使用者交互。如果一蚗野峖b一茠塞(模式下)的通道上調用 gets或
read,而此時沒有可獲得的數據,在輸入數據到來之前,進程將被阻塞,它將不能服務於其他事件,所以對於使用者它像是被「冷-
寣v了。使用 fileevent,進程可以在數據出現(present)的時-
堀Q告之,而只在不會導P阻塞的時埣掍 gets或 read 。
給 fileevent的 channelId 參數參照一茈普}的通道,比如從以前的 open 或
socket 命令的得到的返回C如果指定了 script 參數,則 fileevent
建立一虓s的事件處理器: 在通道變得可讀或可寫(依賴於給 fileevent 的第二-
荌捊)的時唻D script 的C在這種情況下 fileevent 返回一茠臟瞗C對於一-
蚗仵 readable 和
writable事件處理器是獨立的,可以單獨的建立和刪除。但是,在一-
荅S定的解釋器中在一荅S定的時間上對於一蚗仵袕怞h只能有一readable和一
writable 處理器。如果調用
fileevent而此時指定的處理器已經在調用的解釋器中存在,新的稿本替換舊的那-
荂C
如果沒有指定 script 參數,fileevent 為
channelId返回當前的稿本,如果沒有則返回一茠臟瞗C如果 指定 script
參數為一茠臟磭h刪除這茖馧B理器,如此將不會有稿本被調用。在一-
茬q道被關閉或它的解釋器被刪除的時埬仵蛌漕馧B理器也自動的被刪除。
如果在底層的設備上有可獲得的未讀的數據則把一茬q道考慮為可讀的。除了-
n從這茬q道讀的最近的嘗試是不能在輸入緩沖中找到一荍嗾膋漲瑼漱@ gets
調用的特殊情況之外,如果在一蚇擗J緩沖中有未讀的數據也把一-
茬q道考慮未可讀的。這荅S征允釣洏峔饃q一-
茼b非阻塞模式下的檔案中一次讀一行。如果在底層的檔案或設備上有檔案結束或出錯的條件出現也把一-
茬q道考慮為可讀的。對於 script 檢查這些條件和正確的處理它怓O很-
n的;例如,如果沒有對檔案結束的特定檢查,可能發生一茧L-
的循環,這裏script 讀不到數據,返回,立即奐s調用。
如果至少數據中有一字節可以寫到底層檔案或設備中而不阻塞,或者在底層的檔案或設備上有錯誤的條件出現則把一-
茬q道考慮為可寫的。
事件驅動 I/O 最好為使用 fconfigure
命令配置成非阻塞模式的通道工作。在阻塞模式下,如果你給它的數據比底層檔案或數據可接受的多,則
puts 命令將阻塞,而如果你讀的數據比已經準備好的多,則gets 或 read
命令將阻塞;在命令阻塞時不處理事件。在非阻塞模式下,puts、read和
gets從不阻塞。參見這些單獨命令的文件來得到關於它-
怞p何處理阻塞和非阻塞通道的信息。
給一蚗仵蚳顗瑤Z本在調用fileevent
命令的解釋器的全局的層次上執行(在任何 Tcl
過程的上下文之外)。如果在執行稿本期間發生了錯誤則使用 bgerror
機制來報告錯誤。額外的,如果一-
茖馧B理器曾經返回錯誤則刪除它;目的是防止缺陷很多的處理器導P無循環。
P CREDITS
fileevent 基於由 Mark Diekhans 建立的 addinput 命令。
SEE ALSO
bgerror(n), fconfigure(n), gets(n), puts(n), read(n)
r KEYWORDS
asynchronous I/O, blocking, channel, event handler, nonblocking,
readable, script, writable.
[]
Hhh
[]
2001/08/13
m Linux manUpn:
http://cmpp.linuxforum.net