[英]Reading a .mov file with NSInputStream while writing with AVCaptureMovieFileOutput
[英]Reading dynamically growing file using NSInputStream
我应该使用Objective-C来读取一些缓慢增长的文件(在Mac OS X下)。
“慢慢地”是指我在EOF变大之前先阅读它。
通过普通同步CI中的POSIX代码,可以做到以下几点:
while(1)
{
res = select(fd+1,&fdset,NULL,&fdset,some_timeout);
if(res > 0)
{
len = read(fd,buf,sizeof(buf));
if (len>0)
{
printf("Could read %u bytes. Continue.\n", len);
}
else
{
sleep(some_timeout_in_sec);
}
}
}
现在,我想使用NSInputSource或其他一些异步Objective-C技术以某种异步方式来重写它。
NSInputSource的问题:如果使用scheduleInRunLoop:方法,则一旦获得NSStreamEventEndEncountered事件,我将停止接收任何事件。
我仍然可以使用NSInputSource还是应该以某种方式使用NSFileHandle或您会推荐什么?
我看到一些问题。
1)some_Timeout,因为select()需要是一个struct timeval *。
2)对于sleep(),some_timeout必须为整数秒。
3)some_timeout中的值通过select()递减(这就是为什么最后一个参数是指向struct timeval *的指针的原因。在每次调用select()之前,都需要重新初始化该struct。
4)select()的参数是感兴趣的最高fd + 1,然后是三个单独的struct fd_set *对象。 第一个用于输入文件,第二个用于输出文件,第三个用于异常,但是,发布的代码对输入和异常使用相同的struct fd_set,这可能不是必需的。
当上述问题得到纠正后,该代码应该可以工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.