我希望监控文件的修改,但是它不起作用。
示例输入:
./es file_to_watch
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <linux/limits.h>
#include <sys/inotify.h>
#define BUF_LEN sizeof(struct inotify_event) + NAME_MAX + 1 /*buffer to store the data of events*/
int main( int argc, char *argv[]){
int fd, wd, length;
char buffer[BUF_LEN];
struct inotify_event *event;
if(argc < 2){
exit(1);
}
else{
fd = inotify_init();
if(fd < 0){
perror("inotify_init");
}
wd = inotify_add_watch(fd, argv[1], IN_OPEN | IN_MODIFY | IN_DELETE);
if (wd == -1)
return(1);
else{
while(1){
length = read(fd, buffer, BUF_LEN);
if(length == -1)
return(0);
event = (struct inotify_event *) &buffer;
if(event->len){
if(event->mask & IN_OPEN){
printf( "file %s was open.\n", event->name );
}
else if(event->mask & IN_MODIFY){
printf( "file %s was modify.\n", event->name );
}
else if(event->mask & IN_DELETE){
printf( "file %s was delete.\n", event->name );
break;
}
}
}
inotify_rm_watch(fd, wd);
close(fd);
}
}
return(0);
}
当我尝试打开文件时,什么都没有发生。当我尝试更改或取消它时,同样的事情也发生了。当文件被删除时,程序应该结束。 谢谢。
read()
后,您需要循环遍历inotify事件,并且此循环必须考虑到事件名称的不同长度。以下是这样一个循环的示例:http://www.enodev.fr/notifications-file-descriptors.html - Christophe Vu-Brugier