2012-11-27 75 views
3

我正在使用OSX FSEventStream監視特定目錄中的文件系統更改。我在查看文檔here,我發現了一個有趣的標誌,kFSEventStreamCreateFlagIgnoreSelf。FSEventStream:kFSEventStreamCreateFlagIgnoreSelf標誌是做什麼的?

根據使用此標誌的FSEvents框架不會通知您的文檔「是由當前進程觸發的事件。」

這聽起來不錯。這正是我想要的,但在實踐中,我發現我仍然得到一些由當前進程觸發的事件。

在我有限的測試,如果監控過程中創建一個新的文件,或重命名和現有文件的事件仍然被觸發。雖然現有文件至少有一些修改不會觸發事件。

基於有限的文件(和國旗的名字),我不希望任何事件由當前進程觸發。

所以我的問題是雙重的: - 這是預期的行爲?我擔心,如果我依靠現存的行爲,那可能是無意的,將來它可能會從我下面改變。

二: - 如果是,沒有人知道使用此標誌的時候我可以期待仍然可以投放哪些事件。

+0

你有解決這個問題的辦法嗎? –

回答

2

我注意到,使用此標誌時,任何文件的變化,我做我的過程中不會被髮送到我的事件。如果在此之後我沒有收到任何外部事件,那麼我上次記錄的eventId(用於下次創建流時使用)將比我沒有收到的事件早,所以下次我開始處理時會看到這些事件,在事件歷史轉儲中。

對不起,這不是太多的答案,但它是什麼,我認爲,可能有助於解釋你所看到的。

+0

這應該是一個評論,而不是一個答案。我承認你沒有足夠的代表發表評論,但發佈答案並不是最好的主意(他們可能會被標記)。 – GraphicsMuncher

0

我還觀察到不通過設置kFSEventStreamCreateFlagIgnoreSelf標誌實現。

但是,設置kFSEventStreamCreateFlagMarkSelfkFSEventStreamCreateFlagIgnoreSelf(使用逐OR(|))的伎倆我。我不再收到有關保存我的應用程序的文件通知(在我的情況下是文檔)。

kFSEventStreamCreateFlagMarkSelf可因爲OS X 10.9。