【发布时间】:2013-04-06 13:12:52
【问题描述】:
我正在使用readabilityHandler 块从NSFileHandle(来自NSPipe)读取数据:
fileHandle.readabilityHandler = ^( NSFileHandle *handle ) {
[self processData: [handle availableData]];
}
这很好,我得到了我期望的所有数据,我的 processData 方法。问题是我需要知道读取最后一块数据的时间。 availableData 应该返回一个空的 NSData 实例,如果它到达文件末尾,但问题是在 EOF 上不会再次调用可达性处理程序。
我找不到任何关于如何在 EOF 上获得某种通知或回调的信息。那么我错过了什么? Apple 真的提供了没有 EOF 回调的异步读取 API 吗?
顺便说一句,我不能使用基于运行循环的readInBackgroundAndNotify 方法,因为我没有可用的运行循环。如果我不能让它与NSFileHandle API 一起工作,我可能会直接使用调度源来执行 IO。
【问题讨论】:
-
您确定管道的所有写入端都已关闭吗?关于运行循环,所有线程都会按需创建一个运行循环,您可以自己运行一个。
-
是的,管道已正确关闭。我做了一些更多的实验,同样的事情也发生在其他类型的
NSFileHandle实例上。从标准输入或常规文件读取时,也没有 EOF 通知。
标签: objective-c macos cocoa nsfilehandle