Linux程式設計基礎之inotify機制簡析

2021-07-31 12:00:34 字數 2496 閱讀 5156

本文實現乙個inotify的小例子,功能:指定乙個目錄,當目錄中建立檔案或者刪除檔案時,把相應的通知資訊列印出來。

一、inotify機制和api

1、inotify機制

inotify可以用來監視檔案系統的變化,它不僅可以監視檔案的變化,還可以監視資料夾的變化。當有變化發生時,它就會返回相應的變化事件。關於inotify機制的詳細資訊可以參考相關資料或者資料。

2、inotify涉及的api

a、int inotify_init(void);

初始化乙個inotify的例項並返回乙個和檔案描述符作為該inotify事件佇列的控制代碼。

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

向該inotify例項中新增乙個監視的檔案或者目錄。

fd : inotify例項

pathname : 要監視的檔案或者資料夾名稱

mask : 要監視事件的遮蔽位,它的具體可用引數如下所示:

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 (*).

c、int inotify_rm_watch(int fd, int wd);

移除要監視的檔案或者資料夾。

二、測試

實現乙個簡單的小例子進行測試,當指定目錄中有檔案建立或者刪除時把相應的資訊列印出來。

程式的完整**實現如下:

#include #include #include #include /*	指定乙個目錄,當目錄中建立或者刪除檔案時,把相應的資訊列印出來

* usage : inotify */

int main(int argc, char *argv)

/* 初始化乙個inotify的例項,獲得乙個該例項的檔案描述符 */

fd = inotify_init();

/* 新增乙個用於監視的目錄:主要監視該目錄中檔案的新增和移除 */

result = inotify_add_watch(fd, argv[1], in_delete | in_create);

if(-1 == result)

/* 不停的監視當前目錄中是否有新增或者刪除檔案 */

while(1)

event_pos = 0; // 每次讀取資料時復位位置資訊

/* 將獲得的inotify資訊列印出來 */

while(result >= (int)sizeof(*event))

else // 刪除乙個檔案時

}event_size = sizeof(*event) + event->len;

result -= event_size;

event_pos += event_size;

}} /* 關閉這個檔案描述符 */

close(fd);

return 0;

}

編譯並執行上面**結果如下:

Linux之shell程式設計基礎

變數在shell中分為 本地變數 環境變數 位置引數 本地變數 僅可在使用者當前shell生命期的指令碼中使用的變數,本地變數隨著shell程序的消亡而無效,本地變數在新啟動的shell中依舊無效,類似於c c 中的區域性變數的概念 環境變數 適用於所有登入程序所產生的子程序 位置引數 用於向she...

Linux 之網路程式設計基礎 一

應用層 提 用軟體介面,用以設定與另乙個軟體通訊 表示層 裝置固有資料格式和網路標準資料格式化 會話層 傳輸層 管理兩個節點之間的資料傳輸,負責可靠傳輸 確保資料被可靠的傳送到目的位址 網路層 位址管理與路由選擇 作用 在網路相互連線的環境中,將資料從傳送端主機傳送到接收端主機 資料鏈路層 互聯裝置...

linux 程式設計基礎

版本介紹 計算機語言的分類 編譯型 執行前翻譯,解釋型 區域性變數 local可以檢視區域性變數 定義乙個區域性變數 ii chenzhou 變數賦值 contrainid sudo docker ps a grep kafka cut c1 12 通過命令列取值 echo contrainid環境...