我的程序使用inotify监视文件上的更改。我的代码如下:
fd = inotify_init();
wd = inotify_add_watch(fd, "./test.txt", IN_ALL_EVENTS);
len = read(fd, buff, BUFF_SIZE);
while (i < len) {
struct inotify_event *pevent = (struct inotify_event *) &buff[i];
//process events
i += sizeof(struct inotify_event) + pevent->len;
}
然而,当我在被监视的文件中获得了第一次更改的几个事件(事件IN_OPEN
, IN_MODIFY
, IN_ACESS
等)之后,被监视的文件中的后续更改确实产生了任何其他事件==>我的程序在读取函数中挂起(读取被阻止)
你们能帮我解释一下这个错误吗
请显示实际发生的操作"./test.txt"和更多关于你的代码(buff, BUFF_SIZE)。这里有一些需要检查的地方:
- 有一些特殊的事件,如IN_IGNORED,可能会从文件中删除手表
- 我建议使用select/poll/epoll来监控fd,而不是阻塞读取。
使用fcntl使文件描述符非阻塞