歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下監測目錄或文件的變化---inotify

Linux下監測目錄或文件的變化---inotify

日期:2017/2/28 14:51:29   编辑:Linux教程

inotify是用來監視文件系統事件的機制,在linux 2.6.13內核中引入。該機制可以用來監視文件和目錄,當文件或目錄發生變化時,內核會將文件或目錄的變化發送給inotify文件描述符,在應用層只需調用read()就可以讀取這些事件,非常的方便。更好的是,inotify文件描述符還可以使用select、poll、epoll這些接口來監聽,當有事件發生是,inotify文件描述符會可讀。

一、接口介紹

1、inotify_init()

定義如下:

#include <sys/inotify.h>

int inotify_init(void);
int inotify_init1(int flags);

inotify_init()用來初始化一個新的inotify實例,並返回一個文件描述符。這個描述符在inotify_add_watch()中會用到,發生的事件也是從這個描述中讀取。

除了這個接口外,還有一個相同功能的接口inotify_init1()。inotify_init1()中多了一個參數flags,用來在初始化時設置inotify文件描述符的屬性。flags中可以設置的標志有兩個:IN_NONBLOCK和IN_CLOEXEC。這兩個標志不難理解,前一個是用來將inotify文件描述設置為非阻塞狀態,後一個是設置close-on-exec(FD_CLOEXEC)標志。通過使用這兩個標志就避免在創建inotify文件描述後再調用fcntl()的消耗了,代碼看起來也會簡潔一些。

2、inotify_add_watch()

定義如下:

#include <sys/inotify.h>

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

其中fd是inotify文件描述符,inotify_init()的返回值;pathname是要監聽的文件的路徑;mask是指定要監視哪些事件,在後面具體介紹。

inotify_add_watch()用於將要監視的文件或目錄添加到inotify中,返回值是一個inotify標識,注意不要和inotify_init()的返回值搞混淆了。inotify_init()的返回值是在讀取事件、注冊監聽文件時使用,而inotify_add_watch()的返回值用來判斷返回的事件屬於哪個監聽的文件(後面介紹inotify_event結構時會看到),以及移除監聽文件時使用。

3、inotify_rm_watch()

定義如下:

#include <sys/inotify.h>

int inotify_rm_watch(int fd, uint32_t wd);

inotify_rm_watch()用於移除對某個文件的監聽,其中fd是inotify文件描述符,由inotify_init()返回;wd是inotify標識,由inotify_add_watch()返回。

Copyright © Linux教程網 All Rights Reserved