2010-11-01 36 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,而不是輪詢。這不完全是一個回調函數,但減少了你所關心的開銷。