色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 對linux中的inotify機制的一點認識

對linux中的inotify機制的一點認識 時間:2018-09-21      來源:未知

Linux中一切皆文件,在應用程序中,有時候我們需要對文件系統的目錄或者文件進行監控,以便于我們能根據文件系統的變化來做相應的后續操作。那我們如何有效的對文件系統進行監控呢?不用苦惱,linux的前輩們已經給我們做好了,在linux2.6內核中開始引入,作為linux的系統調用來使用,所以我們就可以用它來幫助我們來完成這件事了。

接下來我們來學習一下于inotify相關的系統調用接口:

int inotify_init(void);

功能:獲得一個文件描述符,用于關聯后續的inotify事件隊列。

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

功能:在inotify文件描述符中添加新的監聽對象。

參數: fd, inotify_init函數的返回值

Pathname, 添加要監聽的文件或者目錄的路徑

Mask, 要監聽的文件或者目錄上發生的事件。

返回值:就是新添加監聽的文件描述符。

int inotify_rm_watch(int fd, int wd);

功能:從inotify的事件隊列中刪除一個監聽對象。

參數:fd, 監聽事件描述符,就是inotify_init的返回值

wd, inotify_add_watch的返回值。

有了上邊的這三個函數,我們我們就可以添加對文件或者目錄的監聽事件了,但是文件或者目錄一旦發生了變化我們又怎么能直到呢?所以我們僅僅有他們還不夠,我們還需要read函數。因為當我們添加了監聽事件后,我們需要使用select或者其他的方式來監聽我們的監聽隊列,一旦發生變化,我們就必須得用read函數讀取該描述符的數據,其中的數據就包含了我們文件的變化。read的返回值就是一個或者多個struct inotify_event的結構體,結構體的定義如下:

struct inotify_event

{

int wd; /* Watch descriptor. */

uint32_t mask; /* Watch mask. */

uint32_t cookie; /* Cookie to synchronize two events. */

uint32_t len; /* Length (including NULs) of name. */

char name __flexarr; /* Name. */

};

示例代碼如下:

#define BUF_LEN 10 * (sizeof(struct inotify_event) + NAME_MAX + 1)

#define WATCH_DIR_1 "/home/ys/test_1"

#define WATCH_DIR_2 "/home/ys/test_2"

int main(int argc, const char *argv[])

{

int init_fd;

int watch_fd_1, watch_fd_2;

int watch_mask = IN_ALL_EVENTS;

struct inotify_event *even;

char buf[BUF_LEN] = {0};

char *p = NULL;

ssize_t bytes;

//創建監聽文件描述符句柄

init_fd = inotify_init();

if (init_fd < 0)

{

perror("fail to inotify_init");

exit(1);

}

//添加監聽的目錄或者文件

watch_fd_1 = inotify_add_watch(init_fd, WATCH_DIR_1, watch_mask);

if (watch_fd_1 < 0)

{

perror("fail to inotify_add_watch 111");

exit(1);

}

//添加監聽的目錄或者文件

watch_fd_2 = inotify_add_watch(init_fd, WATCH_DIR_2, watch_mask);

if (watch_fd_2 < 0)

{

perror("fail to inotify_add_watch 222");

exit(1);

}

fd_set readfds, tempfds;

int maxfd, i = 0;

FD_ZERO(&readfds);

FD_ZERO(&tempfds);

//監聽init_fd

FD_SET(init_fd, &readfds);

maxfd = init_fd;

tempfds = readfds;

while (1)

{

tempfds = readfds;

if (select(maxfd + 1, &tempfds, NULL, NULL, NULL) < 0)

{

perror("fail to select");

break;

}

for (i = 0; i < maxfd + 1; i++)

{

if (FD_ISSET(i, &tempfds))

{

//從init_fd中讀取結構體

bytes = read(i, buf, BUF_LEN);

if (bytes < 0)

continue;

for (p = buf; p < buf + bytes;)

{

//轉換成inotify_event結構體

even = (struct inotify_event *)p;

if (even->mask & IN_CREATE)

{

if (even->wd == watch_fd_1)

printf("create new file: [%s] in %s\n", even->name, WATCH_DIR_1);

else if (even->wd == watch_fd_2)

printf("create new file: [%s] in %s\n", even->name, WATCH_DIR_2);

}

else if (even->mask & IN_DELETE)

{

if (even->wd == watch_fd_1)

printf("delete [%s] from %s\n", even->name, WATCH_DIR_1);

else if (even->wd == watch_fd_2)

printf("delete [%s] from %s\n", even->name, WATCH_DIR_2);

}

else if (even->mask & IN_IGNORED)

{

if (even->wd == watch_fd_1)

printf("%s was deleted!\n", WATCH_DIR_1);

else if (even->wd == watch_fd_2)

printf("%s was deleted!\n", WATCH_DIR_2);

inotify_rm_watch(init_fd, even->wd);

}

//p指針向后的偏移

p += sizeof(struct inotify_event) + even->len;

}

}

}

}

//刪除監聽的描述符

inotify_rm_watch(init_fd, watch_fd_1);

inotify_rm_watch(init_fd, watch_fd_2);

close(init_fd);

close(watch_fd_1);

close(watch_fd_2);

return 0;

}

上一篇:Fragment的使用

下一篇:APK之間的互相調用

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 天天综合网在线观看视频 | 无遮挡吃胸膜奶免费网站 | 全免费A级毛片免费看视频 粉嫩高中生的第一次 | 欧美高潮抽搐喷水大叫 | 日韩人妻不卡一区二区三区 | 在线观看av你懂的 | 欧洲免费一区二区三区视频 | 亚洲国产高清在线一区二区三区 | 欧美成人看片一区二区三区尤物 | 把腿张开看老子臊烂你免费 | 中文字幕 综合一区 | 男女裸体下面进入的免费视频 | 日本乱子伦一区二区三区 | 女人高潮的24种图片 | 亚洲日韩国产精品无码AV | 成人无码av片在线观看 | 色欲人妻AAAAAAA无码 | 无码人妻丰满熟妇区五十路 | 和岳每晚弄的高潮嗷嗷叫视频 | 人妻精油按摩BD高清中文字幕 | 国产精品白丝JK白祙喷水视频 | 欧美精品八区 | 丰满少妇被猛烈进入流水 | 日本高清不卡中文字幕免费 | 黄色大片免费播放 | 久久日韩精品无码一区 | 寂寞少妇饥渴难耐自慰 | 免费午夜爽爽爽www视频十八禁 | 国产办公室无码视频在线观看 | 亚洲国产成人久久三区 | 日日碰狠狠躁久久躁综合小说 | 看黄色录像一级片 | 国产精品久久久 | 撕开校花奶罩揉她娇乳动漫 | 四虎永久在线精品免费无码 | 欧美精品一区二区精品久久 | 囯产香蕉97碰碰碰视频在线观看 | 无码人妻丰满熟妇区96 | 性xxxxx欧美极品少妇 | 97人伦色伦成人免费视频 | 中文在线а天堂中文在线新版 |