2010-11-01 54 views
5

你能解释一下inotify机制吗? 我在网上搜索过它,但我的理解是,如果我想查看文件中的更改,我必须使用“读取”功能进行轮询。 有没有任何回调函数会在文件没有轮询时发生变化时通知我?linux,inotify - 如何订阅?

谢谢,

回答

0

不,inotify需要轮询。

注册使用信号的回调(如建议),是国际海事组织更糟,然后定期轮询。

+0

适当的注意,但你能否详细说明*为什么*这将是坏? :) – 2010-11-01 08:54:59

+1

@FrédéricHamidi信号的一个问题是它们不能很好地与例外混合。第二个问题是信号处理程序应该尽可能地做最少的工作,然后返回。 – 2010-11-01 09:13:17

+2

仅当您通过信号处理程序发生异常时。信号处理程序尽可能少做的事实并不意味着轮询是首选。例如,您的主代码可以创建管道,设置信号处理程序,然后在管道上选择。信号处理程序将单个字符写入管道然后退出。写入是异步信号安全的。控制权返回到您的主代码并选择返回。你有一个最小的信号处理程序,并且不需要轮询。 – atomice 2010-11-29 13:39:14

2

我在猜测你正在使用一些GUI库来为你处理事件。

更好的GUI库有一种方法来观察文件描述符。在GTK中,它是gtk_input_add_full;在Qt中,QSocketNotifier可能适合你。

+1

修复了您的链接,并提供更多的代表,您自己添加它们就没有问题。 – 2010-11-01 09:16:37

1

inotify调用使用文件描述符。您可以使用select()呼叫系列中返回的FD,而不是轮询。这不完全是一个回调函数,但减少了你所关心的开销。