gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:23:21 26 4
gpt4 key购买 nike

我应该使用 Objective-C 来读取一些缓慢增长的文件(在 Mac OS X 下)。

“慢慢地”意味着我在 EOF 变大之前读到它。

通过普通同步 C 中的 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() 之前重新初始化。

4) select() 的参数是感兴趣的最高 fd+1,然后是三个单独的 struct fd_set * 对象。第一个用于输入文件,第二个用于输出文件,第三个用于异常,但是,发布的代码对输入和异常使用相同的 struct fd_set,这可能不是所需要的。

纠正上述问题后,代码应该可以工作。

关于objective-c - 使用 NSInputStream 读取动态增长的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27645998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com