2011-08-04 34 views
4

我想異步地監控任何更改的文件。那是我想在文件被修改/刪除時在我的程序中回調(可能來自內核)。該文件只是一個純文本文件。我知道可以使用輪詢機制來做到這一點,但我正在尋找基於事件的解決方案。我讀了inotify,但看起來它需要修補我的內核。是否有異步的方式知道文件已更改?

如果解決方案是POSIX兼容的,它甚至更好。

回答

7

Inotify早在2005年就被合併到了Linux內核中,所以除非您在老系統中使用,否則您應該可以直接使用它。

我不認爲存在這種與POSIX兼容的解決方案。 Mac OS X有FSEvents

同時檢查man page使用inotify的。

編輯:

不知道你的約束和/或要求,但也有GFileMonitor如果你使用油嘴(C++的結合是glibmm)和QFileSystemWatcher是你使用Qt。這些可能更加跨平臺友好。

+1

下面是使用'inotify'等待文件出現,它是否有助於一個小例子 - http://lazarenko.me/tips-and-tricks/waiting-for-the-file-to-appear- in-linux-using-inotify 它可以很容易地被調整來監視文件的變化。 – 2011-08-04 18:40:42

+0

thanx爲解決方案傢伙 – vinodkone

0

1)

編寫創建一個叫做/ dev/special_file文件中的設備驅動程序。

符號鏈接的純文本文件到/ dev /特殊文件

攔截的低級別讀/寫操作修改真實文本文件,名爲/path/to/text.txt,然後生成通過回調信號或某種類型的進程間通信到你想要的任何進程。

2)

有一個過程打開你的文本文件,只是坐着等。使用select()來檢測文件何時被修改,然後執行回調例程。

相關問題