在Unix上:我经历过FAM
和Gamin
,两者似乎都提供了客户端/服务器文件监控系统。我宁愿有一个系统,我告诉内核监视一些inode,当事件发生时它会把我发回。 Inotify
最初看起来很有希望inotify_init1
让我通过IN_NONBLOCK
,这会导致poll()
直接返回。但是,据我所知,如果我想获得有关受监控文件的新闻,我必须定期调用它。现在我有点缺乏想法。
是否有异步监视文件的东西?
PS:我还没有看过Windows,但我也希望得到一些答案。答案 0 :(得分:2)
正如Celada在上述评论中所说,inotify和民意调查是实现这一目标的正确方法。
信号不是合理的异步编程的机制 - 信号处理程序对于没有经验的人甚至是有经验的人来说都是非常危险的。一个人不会自愿将它们用于此类目的。
相反,应该使用poll,select或类似的系统调用作为程序事件处理机制的核心,围绕事件循环构建一个程序(参见http://en.wikipedia.org/wiki/Event-driven_programming以获得整体解释)。
或者,您可以使用线程或线程加上事件循环。
答案 1 :(得分:0)
然而,你很有意思的答案,我很抱歉,但是我不能接受一种基于阻止调查或选择的机制,当问题陈述“异步”时,无论它隐藏得多深。
另一方面,我发现可以设法通过传递inotify_init1
标志IN_NONBLOCK
来异步运行inotify。信号不会像aio
一样被触发,而read
调用阻止阻止会将errno
设置为EWOULDBLOCK
。