本文實現乙個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環境...