繁体   English   中英

使用NSInputStream读取动态增长的文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM