Linux 監控檔案事件

2022-02-13 12:07:47 字數 820 閱讀 2417

某些應用程式需要對檔案或者目錄進行監控,來偵測其是否發生了某些事件。linux很貼心的為我們提供了inotify api,也是linux的專有。

在使用之前一定要有乙個inotify例項,int inotify_init(void);返回乙個inotify例項的描述符。

新增監控描述符,int inotify_add_watch(int fd,const char *pathname,unit32_t mask);引數解釋:fd就是init返回的描述符,pathname就是你要監控的檔案或者目錄的路徑名,mask這個是用來表示你要監控的事件型別。

刪除監控描述符,int inotify_rm_watch(int fd,uint32_t wd);引數解釋:fd還是你要操作的描述符,wd是你要刪除監控描述符號。

原理肯定需要資料結構來支撐了,先來乙個inotify的通知事件資料結構:

struct

inotify_event

這個地方我要吐槽下這個char name;c不支援但是c++支援。在算結構體大小的時候,他的大小為0。但是我們為這個char name開闢空間的時候,可以通過直接新增長度。舉例說明一下,我要用這個結構體去填充我的乙個buffer,char buffer[len];我們可以這麼定義len:#define len 10*(sizeof(struct inotify_event)+10),這樣我們的buffer的資料空間就可以用下圖來表示。

呼叫read就能從核心讀取所發生的事件,如果事件佇列為空,read就阻塞。

檔案事件 時間事件

redis是乙個事件驅動程式 主要包含 檔案事件和時間事件 檔案事件 主要就是server和client進行操作產生的檔案 時間事件 主要就是一些需要定時執行的事件。檔案事件 檔案事件處理器是單執行緒執行的,但是通過io多路復用,可以處理多個套接字 下面是檔案事件處理器的結構 檔案事件處理器主要是上...

Linux檔案監控

如果要讓伺服器保持最佳效能,你應該將 linux 伺服器的執行級別 runlevel 設定為 3 就是控制台模式,當你需要圖形化桌面的時候使用 startx 命令來啟動它。修改配置 etc inittab 找到 initdefault 一樣,將id 5 initdefault修改為 id 3 ini...

Linux檔案監控

假設要讓server保持最佳效能,你應該將 linux server的執行級別 runlevel 設定為 3 就是控制台模式。當你須要圖形化桌面的時候使用 startx 命令來啟動它。改動配置 etc inittab 找到 initdefault 一樣,將id 5 initdefault改動為 id...