色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號

回到頂部

主站蜘蛛池模板: 欧美日产亚洲国产精品 | 欧美精品久久人妻无码 | 国产色欲色欲色欲WWW | 欧美日韩精品一区二区在线视频 | 五月丁香六月综合缴情在线 | 欧美激欧美啪啪片sm | 18禁止导深夜福利备好纸巾 | 人妻无码少妇一区二区 | 中文字幕免费在线播放 | 97色偷偷色噜噜狠狠爱网站 | 国产女人第一次做爰视频 | 客厅享受丝袜人妻张雅婷 | 99精品视频只有精品高清6 | 丰满少妇乱a片无码 | 色欲欲WWW成人网站 美女扒了内裤让男人桶 | 久热国产vs视频在线观看 | 被男人嗦过奶头一下就变大了 | 欧美日韩第一区 | 亚洲色WWW成人永久网址 | 丰满亚洲大尺度无码无码专线 | 亚洲伊人a线观看视频 | 98视频精品全部国产 | 精品一区日韩 | 少妇白浆高潮无码免费区 | 亚洲国产精品成人AV在线 | 亚洲色精品三区二区一区 | 久久久经典视频 | 久久免 | 国产在线观看免费观看不卡 | 美女裸体色黄污视频网站 | 中文字幕第25页 | 国产最大成人亚洲精品 | 美女网站亚洲一区 | 亚洲日韩色在线影院性色 | chinese国语videos国产 | 色丁香久久 | 最新亚洲av日韩av一区二区三区 | 国产精品成人免费视频网站 | 日韩国产人妻一区二区三区 | GOGOGO免费高清视频3 | 秋霞人成在线观看免费视频 |