【发布时间】:2010-11-01 07:58:31
【问题描述】:
你能解释一下inotify机制吗? 我在网上搜索过它,但我的理解是,如果我想查看文件中的更改,我必须使用“读取”功能进行轮询。 是否有任何回调函数会在文件发生更改而不进行轮询时通知我?
谢谢,
【问题讨论】:
你能解释一下inotify机制吗? 我在网上搜索过它,但我的理解是,如果我想查看文件中的更改,我必须使用“读取”功能进行轮询。 是否有任何回调函数会在文件发生更改而不进行轮询时通知我?
谢谢,
【问题讨论】:
我推测您正在使用一些为您处理事件的 GUI 库。
更好的 GUI 库有一种观察文件描述符的方法。在 GTK 中为gtk_input_add_full;在 Qt 中,QSocketNotifier 可能对你有用。
【讨论】:
inotify 调用使用文件描述符。您可以在 select() 调用系列中使用返回的 FD,而不是轮询。它不完全是一个回调函数,但减少了您所关心的开销。
【讨论】:
您可以使用 libev 库的 ev_io 部分。这将允许您在 inotify fd 可读时设置回调。
libev 的文档可以在这里找到:http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod
【讨论】:
不,inotify 需要轮询。
使用信号注册回调(如建议的那样),IMO 比定期轮询更糟糕。
【讨论】: