fbpx
维基百科

inotify

inotifyLinux核心子系統之一,做為檔案系統的附加功能,它可監控檔案系統並將異動通知應用程式。本系統的出現取代了舊有Linux核心裡,擁有類似功能之dnotify模組。

inotify的原始開發者為John McCutchan、羅伯特·拉姆與Amy Griffis。於Linux核心2.6.13發行時(2005年六月十八日),被正式納入Linux核心[1]。儘管如此,它仍可透過修補程式的方式與2.6.12甚至更早期的Linux核心整合。

inotify的主要應用於桌面搜索軟體,像:Beagle,得以針對有變動的檔案重新索引,而不必沒有效率地每隔幾分鐘就要掃描整個檔案系統。相較於主動輪詢檔案系統,透過作業系統主動告知檔案異動的方式,讓Beagle等軟體甚至可以在檔案更動後一秒內更新索引。

此外,諸如:更新目錄檢視、重新載入設定檔、追蹤變更、備份、同步甚至上傳等許多自動化作業流程,都可因而受惠。

優點 编辑

相較於被inotify取代較舊的 dnotify模組,inotify有諸多益處。[2][3]在舊的模組中,程式必須為每一個被監控的目錄建立file descriptor,這種作法很容易讓行程擁有的file descriptor逼近系統允許的上限,進而形成瓶頸。dnotify產生的file decriptor也會導致系統資源忙碌,使可移除裝置無法被移除,徒增使用上的困擾。

由於dnotify只能讓程式設計師監控目錄層級的變化,「精細度」亦是“dnotify”的劣勢之一。為此,程式設計師必須付出額外的心力,自行撰寫程式碼以期追蹤更細微的檔案系統事件。

inotify相較之下使用較少的file descriptor,亦允許select()與poll()介面,優於dnotify使用的信號系統。這也使得inotify與既有以select()或poll()為基礎之函式庫(如:Glib)整合更加便利。

運作方式 编辑

inotify擁有專為其設計的系統函式。十分容易上手。

 #include <sys/inotify.h> 

要使用inotify必須先引用上面的標頭檔。

 int inotify_init(void) 

建立一個inotify的實體並回傳一個file descriptor,此檔案描述子可供讀取檔案事件。隨後,可透過read()接收事件,為了避免不斷輪詢檔案,read()預設將採用同步I/O的模式,直到事件發生後才會返回。

 int inotify_add_watch(int fd, const char* pathname, int mask) 

透過路徑名稱(pathname)並選定遮罩(mask)以監控inode。inotify_add_watch()會回傳一個監控器(watch descriptor),它代表pathname指向的inode(不同的pathname有可能指向相同的inode)。

 int inotify_rm_watch(int fd, int wd) 

取消對某個路徑之監控。

如同之前所描述的,當檔案系統異動時,核心將會依據程式設定的條件,觸發相應的事件。事件的結構如下:

欄位名稱 內容描述
wd 監控子
mask 事件遮罩
cookie 用來辨別IN_MOVED_FROMIN_MOVED_TO事件
len name欄位長度
name 觸發該事件的檔案名稱(以上層目錄為基準)

可供應用程式追蹤的事件有:

  • IN_ACCESS - 讀取檔案
  • IN_MODIFY - 檔案被修改
  • IN_ATTRIB - 檔案屬性變更
  • IN_OPEN - 檔案被開啟
  • IN_CLOSE_WRITE - 被開啟為「可寫入」狀態的檔案遭關閉
  • IN_CLOSE_NOWRITE - 被開啟為「非寫入」狀態的檔案遭關閉
  • IN_MOVED_FROM and IN_MOVED_TO - 檔案被搬動或更名
  • IN_DELETE - 檔案或目錄被刪除
  • IN_CREATE - 監控中的目錄下有新檔案產生
  • IN_DELETE_SELF - 監控中的檔案遭刪除

缺點 编辑

inotify無法監控软链接型的子目錄。

歷史沿革 编辑

  • August 2005 - 整合至Linux 2.6.13
  • July 2004 - 首次發表 (页面存档备份,存于互联网档案馆

相關條目 编辑

  • File alteration monitor
  • Gamin
  • DMAPI
  • kqueue
  • FSEvents

參考資料 编辑

  1. ^ Linux 2.6.13, kernelnewbies.org. [2012-03-06]. (原始内容于2020-10-19). 
  2. ^ Why inotify?. [2012-03-06]. (原始内容于2010-01-16). 
  3. ^ inotify README file. [2012-03-06]. (原始内容于2016-12-29). 

外部連結 编辑

  • Kernel Korner (页面存档备份,存于互联网档案馆) - Intro to inotify by Robert Love (2005)
  • LWN Article on Inotify (页面存档备份,存于互联网档案馆) Watching filesystem events with inotify (partly out of date)
  • IBM Article (页面存档备份,存于互联网档案馆) Monitor Linux file system events with inotify.

inotify, 此條目翻譯自英語維基百科, 需要相關領域的編者協助校對翻譯, 如果您精通本領域, 又能清楚地將英語翻譯為中文, 歡迎您協助校訂翻譯, 原文参见en, 此條目需要精通或熟悉相关主题的编者参与及协助编辑, 請邀請適合的人士改善本条目, 更多的細節與詳情請參见討論頁, 是linux核心子系統之一, 做為檔案系統的附加功能, 它可監控檔案系統並將異動通知應用程式, 本系統的出現取代了舊有linux核心裡, 擁有類似功能之dnotify模組, 的原始開發者為john, mccutchan, 羅伯特, 拉姆與. 此條目翻譯自英語維基百科 需要相關領域的編者協助校對翻譯 如果您精通本領域 又能清楚地將英語翻譯為中文 歡迎您協助校訂翻譯 原文参见en inotify 此條目需要精通或熟悉相关主题的编者参与及协助编辑 請邀請適合的人士改善本条目 更多的細節與詳情請參见討論頁 inotify是Linux核心子系統之一 做為檔案系統的附加功能 它可監控檔案系統並將異動通知應用程式 本系統的出現取代了舊有Linux核心裡 擁有類似功能之dnotify模組 inotify的原始開發者為John McCutchan 羅伯特 拉姆與Amy Griffis 於Linux核心2 6 13發行時 2005年六月十八日 被正式納入Linux核心 1 儘管如此 它仍可透過修補程式的方式與2 6 12甚至更早期的Linux核心整合 inotify的主要應用於桌面搜索軟體 像 Beagle 得以針對有變動的檔案重新索引 而不必沒有效率地每隔幾分鐘就要掃描整個檔案系統 相較於主動輪詢檔案系統 透過作業系統主動告知檔案異動的方式 讓Beagle等軟體甚至可以在檔案更動後一秒內更新索引 此外 諸如 更新目錄檢視 重新載入設定檔 追蹤變更 備份 同步甚至上傳等許多自動化作業流程 都可因而受惠 目录 1 優點 2 運作方式 3 缺點 4 歷史沿革 5 相關條目 6 參考資料 7 外部連結優點 编辑相較於被inotify取代較舊的 dnotify模組 inotify有諸多益處 2 3 在舊的模組中 程式必須為每一個被監控的目錄建立file descriptor 這種作法很容易讓行程擁有的file descriptor逼近系統允許的上限 進而形成瓶頸 dnotify產生的file decriptor也會導致系統資源忙碌 使可移除裝置無法被移除 徒增使用上的困擾 由於dnotify只能讓程式設計師監控目錄層級的變化 精細度 亦是 dnotify 的劣勢之一 為此 程式設計師必須付出額外的心力 自行撰寫程式碼以期追蹤更細微的檔案系統事件 inotify相較之下使用較少的file descriptor 亦允許select 與poll 介面 優於dnotify使用的信號系統 這也使得inotify與既有以select 或poll 為基礎之函式庫 如 Glib 整合更加便利 運作方式 编辑inotify擁有專為其設計的系統函式 十分容易上手 include lt sys inotify h gt 要使用inotify必須先引用上面的標頭檔 int inotify init void 建立一個inotify的實體並回傳一個file descriptor 此檔案描述子可供讀取檔案事件 隨後 可透過read 接收事件 為了避免不斷輪詢檔案 read 預設將採用同步I O的模式 直到事件發生後才會返回 int inotify add watch int fd const char pathname int mask 透過路徑名稱 pathname 並選定遮罩 mask 以監控inode inotify add watch 會回傳一個監控器 watch descriptor 它代表pathname指向的inode 不同的pathname有可能指向相同的inode int inotify rm watch int fd int wd 取消對某個路徑之監控 如同之前所描述的 當檔案系統異動時 核心將會依據程式設定的條件 觸發相應的事件 事件的結構如下 欄位名稱 內容描述wd 監控子mask 事件遮罩cookie 用來辨別IN MOVED FROM與IN MOVED TO事件len name欄位長度name 觸發該事件的檔案名稱 以上層目錄為基準 可供應用程式追蹤的事件有 IN ACCESS 讀取檔案 IN MODIFY 檔案被修改 IN ATTRIB 檔案屬性變更 IN OPEN 檔案被開啟 IN CLOSE WRITE 被開啟為 可寫入 狀態的檔案遭關閉 IN CLOSE NOWRITE 被開啟為 非寫入 狀態的檔案遭關閉 IN MOVED FROM and IN MOVED TO 檔案被搬動或更名 IN DELETE 檔案或目錄被刪除 IN CREATE 監控中的目錄下有新檔案產生 IN DELETE SELF 監控中的檔案遭刪除缺點 编辑inotify無法監控软链接型的子目錄 歷史沿革 编辑August 2005 整合至Linux 2 6 13 July 2004 首次發表 页面存档备份 存于互联网档案馆 相關條目 编辑File alteration monitor Gamin DMAPI kqueue FSEvents參考資料 编辑 Linux 2 6 13 kernelnewbies org 2012 03 06 原始内容存档于2020 10 19 Why inotify 2012 03 06 原始内容存档于2010 01 16 inotify README file 2012 03 06 原始内容存档于2016 12 29 外部連結 编辑Kernel Korner 页面存档备份 存于互联网档案馆 Intro to inotify by Robert Love 2005 LWN Article on Inotify 页面存档备份 存于互联网档案馆 Watching filesystem events with inotify partly out of date IBM Article 页面存档备份 存于互联网档案馆 Monitor Linux file system events with inotify 取自 https zh wikipedia org w index php title Inotify amp oldid 64154454, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。