2

可读文件事件是由通道变得可读还是由它可读触发?在文件事件处理程序中,我是否必须读取所有可用输入才能在将来触发新事件?或者我可以只读取 1 个字符并返回,如果输入更多,我的处理程序将自动再次直接调用?或者不是直接,而是放在事件队列的末尾,所以这将是防止一个流阻塞整个程序的首选方法(可能不仅仅是 1 个字符,而是例如 1 行)?

4

1 回答 1

3

它由可读的通道触发因此您只能读取输入的一部分(或者偶尔什么也不读取,确保将再次调用处理程序)。但是,读取所有可用输入对性能更好(不一定是所有可用字节:如果您逐行读取,请执行gets直到它返回-1fblocked 条件)。

输入耗尽的标志是 的真实值[fblocked $channel]。这就是为什么输入行不完整的用例gets是可能的:即使通道在技术上是可读的,只是不可获取,在新数据到达之前事件不会再次触发。

于 2013-01-28T13:48:57.613 回答