inotify是linux核心提供的一組系統呼叫,它可以監控檔案系統操作,比如檔案或者目錄的建立、讀取、寫入、許可權修改和刪除等。
inotify使用也很簡單,使用inotify_init建立乙個控制代碼,然後通過inotify_add_watch/inotify_rm_watch增加/刪除對檔案和目錄的監聽。
php中提供了inotify擴充套件,支援了inotify系統呼叫。inotify本身也是乙個檔案描述符,可以加入到事件迴圈中,配合使用swoole擴充套件,就可以非同步非阻塞地實時監聽檔案/目錄變化。
如果已經安裝了inotify/swoole可以跳過此步驟。
pecl install swoole
pecl install inotify
操作成功後,修改php.ini,加入
extension=swoole.so
extension=inotify.so
檢視擴充套件是否載入成功:
php -m | grep swoole
php -m | grep inotify
首先在當前目錄建立乙個inotify.data檔案,示例就用來監聽此檔案。
//建立乙個inotify控制代碼
$fd = inotify_init();
//監聽檔案,僅監聽修改操作,如果想要監聽所有事件可以使用in_all_events
$watch_descriptor = inotify_add_watch($fd, __dir__.'/inotify.data', in_modify);
while (true)
}}//釋放inotify控制代碼
inotify_rm_watch($fd, $watch_descriptor);
fclose($fd);
修改inotify.data,就可以看到程式輸出了資訊。
echo "hello world" > inotify.data
inotify event :array (
'wd' => 1,
'mask' => 2,
'cookie' => 0,
'name' => '',
)
//建立乙個inotify控制代碼
$fd = inotify_init();
//監聽檔案,僅監聽修改操作,如果想要監聽所有事件可以使用in_all_events
$watch_descriptor = inotify_add_watch($fd, __dir__.'/inotify.data', in_modify);
//加入到swoole的事件迴圈中
swoole_event_add($fd, function ($fd)
}});
這裡使用了swoole擴充套件提供swoole_event_add函式,將inotify控制代碼設定為非阻塞,並加入到epoll事件迴圈中。程式變成非同步非阻塞模式。當有事件發生時才會執行inotify_read獲取事件。沒有事件發生時,程式可以執行其他的邏輯。
此程式與上乙個同步阻塞例子的邏輯是相同的,向inotify寫入內容時也會列印事件資訊。區別在於swoole+inotify的程式是非同步的。可以支援併發監聽大量檔案和目錄,並且除了inotify操作之外還可以執行其他的io操作。
inotify監控軟體 實時同步
建立乙個檔案描述符,附加乙個或多個監視器 乙個監視器 是乙個路徑和一組事件 然後使用 read 方法從描述符獲取事件。確認epel源可以使用 yum y install inotify tools usr bin inotifywait 監控資料變化命令 預設監控一次 語法結構 inotify 引數...
基於inotify的檔案監控方案
最近在做乙個linux上的檔案監控程式,2.6核心提供了inotify機制,這僅僅是個機制,任何策略都必須自己實現,這一點從inotify不提供遞迴介面就可以看出來,如果我實時監控到目錄被建立,那麼馬上將這個新目錄加入監控表,這個想法是最初的想法,也是最直接的想法,可是仔細推敲一下就會發現這個實現有...
基於inotify的檔案監控方案
最近在做乙個linux上的檔案監控程式,2.6核心提供了inotify機制,這僅僅是個機制,任何策略都必須自己實現,這一點從inotify不提供遞迴介面就可以看出來,如果我實時監控到目錄被建立,那麼馬上將這個新目錄加入監控表,這個想法是最初的想法,也是最直接的想法,可是仔細推敲一下就會發現這個實現有...