Cor*_*ter 7 c++ file monitor inotify
我的目标:监视文本文件以进行修改,而监视器不会阻塞我的程序,而是形成循环的一部分(因此按顺序检查)。
我的脑袋说:要么找到一种方法以非阻塞模式运行 iNotify,要么线程 iNotfiy。
我尝试了非阻塞方式,并使用以下命令为我的 iNotify 实例禁用了 O_NONBLOCK:
fcntl (fd, F_SETFL, fcntl (fd, F_GETFL) | O_NONBLOCK);
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做然后我尝试:
length = read(fd, buffer, BUF_LEN);
Run Code Online (Sandbox Code Playgroud)
它一直告诉我,对于读取,资源暂时不可用。
谁能给我一些关于如何实现我想做的事情的提示?不需要是这种方法,但我需要该功能,因为我正在使用网络服务器编辑文本文件并希望将修改读入我的 C++ 程序以更新变量。
提前致谢!
EAGAIN(资源暂时不可用)是当文件描述符设置为非阻塞模式时正在读取的文件描述符上没有可用数据时预期的错误状态。由于您使用的是轮询循环,因此您可以尝试在下一次迭代中再次阅读。
或者,您可以尝试对inotify文件描述符使用信号驱动的 I/O 通知:
从 Linux 2.6.25 开始,信号驱动的 I/O 通知可用于
inotify文件描述符;请参阅F_SETFL(用于设置O_ASYNC标志)F_SETOWN、 和F_SETSIG中的讨论fcntl(2)。传递给信号处理程序的siginfo_t结构(在 中描述sigaction(2))设置了以下字段:si_fd设置为inotify文件描述符编号;si_signo设置为信号编号;si_code设置为POLL_IN;并POLLIN在 si_band 中设置。
| 归档时间: |
|
| 查看次数: |
3903 次 |
| 最近记录: |