功能實現
inotify api用於檢測檔案系統變化的機制,比如新建檔案、檔案更新等等。inotify可用於檢測單個檔案,也可以檢測整個目錄。
函式inotify_init(void)
建立乙個inotify的例項,
返回inotify事件佇列的檔案描述符。
核心也提供了inotify_init1(int flags)介面函式
flag等於0的,該函式等價於inotify_init(void)函式。
inotify_add_watch(int fd, const char* pathname, uint32_t mask)
新增「watch list」,檢測列表。
fd就是inotify_init的返回值,
pathname是要檢測目錄或者檔案的路徑,
mask就是要檢測的事件型別。
返回 成功則是乙個unique的watch描述符。
inotify_rm_watch(int fd, int wd)
從watch list種移除檢測的物件。
使用流程
1、初始化
2、讀取檔案
3、判斷事件處理
事件結構體
struct inotify_event
;
wd: 檢測的物件的watch descriptor
mask: 檢測事件的mask
cookie: 和rename事件相關
len: name欄位的長度
name: 檢測物件的name`
事件型別:
in_access file was accessed (read) ().
in_attrib metadata changed, e.g., permissions, timestamps, extended
attributes, link count (since linux 2.6.25), uid, gid, etc.().
in_close_write file opened for writing was closed ().
in_close_nowrite file not opened for writing was closed ().
in_create file/directory created in watched directory ().
in_delete file/directory deleted from watched directory ().
in_delete_self watched file/directory was itself deleted.
in_modify file was modified ().
in_move_self watched file/directory was itself moved.
in_moved_from file moved out of watched directory ().
in_moved_to file moved into watched directory ().
in_open file was opened ().
示例:
#include
#include
#include
#include
intwatch_inotify_events
(int fd)
/*因為read的返回值存在乙個或者多個inotify_event物件,需要乙個乙個取出來處理*/
while
( ret >=
(int
)sizeof
(struct inotify_event)
)else
}/*event_size就是乙個事件的真正大小*/
event_size =
sizeof
(struct inotify_event)
+ event->len;
ret -
= event_size;
event_pos +
= event_size;
}return0;
}int
main
(int argc,
char
** ar**)
/*inotify初始化*/
inotifyfd =
inotify_init()
;if( inotifyfd ==-1
)/*新增watch物件*/
ret =
inotify_add_watch
(inotifyfd, 「pic/」, in_create | in_delete)
;/*處理事件*/
watch_inotify_events
(inotifyfd)
;/*刪除inotify的watch物件*/if(
inotify_rm_watch
(inotifyfd, ret)==-
1)/*關閉inotify描述符*/
close
(inotifyfd)
;return0;
}
編譯
gcc inotify.c -o inotify
在執行程式目錄新建pic目錄
mkdir pic
後台執行程式
./inotify&
在pic目錄新建檔案
touch pic/1.txt
現象終端列印
create file: 1.txt
檔案監視器 Filemon
我們可能經常會發現一些莫名其妙的檔案,很多情況下我們不清楚這個檔案是做什麼用的,有時就會懷疑這些檔案是不是病毒,filemon可以幫助我們找到答案,可以用filemon監視某個檔案是由哪個程序生成的。filemon出自 url 這個團隊目前已經被microsoft收購。如果你在用這個軟體時,字型很小...
檔案監視器 Filemon
我們可能經常會發現一些莫名其妙的檔案,很多情況下我們不清楚這個檔案是做什麼用的,有時就會懷疑這些檔案是不是病毒,filemon可以幫助我們找到答案,可以用filemon監視某個檔案是由哪個程序生成的。filemon出自 url 這個團隊目前已經被microsoft收購。如果你在用這個軟體時,字型很小...
設計模式C 實現 監視器物件
監視器物件設計模式使併發方法的執行同步化,以確保任一時刻僅有乙個方法在物件內執行。別名執行緒安全被動物件。問題場景 應用程式包含被多個執行緒併發呼叫的物件。這些方法通常修改其物件的內部狀態。為了併發執行緒內正確執行,有必要對物件的訪問進行同步和排程。如果客戶機必須顯示的獲取和釋放底層同步機制,如訊號...