对inotify描述符的读取被永久阻塞
read on inotify descriptor is blocked forever
我的程序使用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使文件描述符非阻塞
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 无法找到/读取配置文件.conf-FileIOException
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++将文本文件中的数据读取到结构数组中
- 正在将csv文件读取为双精度矢量
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么在读取文件大小时文件IO速度会发生变化
- 正在读取二进制文件(is_open)
- 如何在c++中从文本文件中逐行读取整数
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 独立读取-修改-写入顺序
- 从文本文件中读取时钟时间和事件时间并进行处理
- 为什么要使用select()调用对inotify实例执行选择性读取
- 对inotify描述符的读取被永久阻塞
- 不使用Inotify从Linux内核读取文件系统事件