[英]How to monitor multiple locations and show a message separately for each path?
在这段代码中,我试图监控一个文件系统。 但是我面临的问题是我同时监视两个位置,为此我做了一个if-statement
,例如if(wd1)
(在路径名 1 中创建的文件)然后通知我第一个路径和if(wd2)
(在路径名 2 中创建的文件)然后通知我第二条路径。
但即使我在pathname2
中创建一个文件,它也会给我pathname1
的消息。 如何使这个if-statement
起作用?
int main(){
int length, i = 0, fd, wd1, wd2;
char buffer[EVENT_BUF_LEN];
char pathname1[200] = "path/to/location1";
char pathname2[200] = "path/to/location2";
fd = inotify_init();
wd1 = inotify_add_watch(fd, pathname1, IN_CREATE);
wd2 = inotify_add_watch(fd, pathname2, IN_CREATE);
length = read( fd, buffer, EVENT_BUF_LEN );
while(i < length){
struct inotify_event *event = (struct inotify_event *)&buffer[i];
if(event->len){
if(event->mask & IN_CREATE){
if(wd1){
printf("New file is '%s' created in %s\n", event->name, pathname1);
}
else if(wd2){
printf("New file is '%s' created in %s\n", event->name, pathname2);
}
}
}
i += EVENT_SIZE + event->len;
}
inotify_rm_watch(fd, wd1);
inotify_rm_watch(fd, wd2);
close(fd);
}
以下行不是您想要的:
if(wd1){
此行仅检查inotify_add_watch
function 的返回值,而此 function 不太可能返回 0。您最可能的意思是:
if(event->wd == wd1){
这会将先前返回的 wd1 值与触发的事件的监视文件描述符进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.