C++ 使用非阻塞iNotify

C++ 使用非阻塞iNotify,c++,file,monitor,inotify,C++,File,Monitor,Inotify,我的目标是:监视文本文件进行修改,而不让监视器阻塞我的程序,而是形成循环的一部分(因此按顺序检查) 我的脑袋说:要么找到一种方法在非阻塞模式下运行iNotify,要么找到线程iNotfiy 我尝试了非阻塞方式,并使用以下命令为我的iNotify实例禁用了O_NONBLOCK: fcntl (fd, F_SETFL, fcntl (fd, F_GETFL) | O_NONBLOCK); 但是,当我这样做,然后尝试: length = read(fd, buffer, BUF_LEN); 它不断

我的目标是:监视文本文件进行修改,而不让监视器阻塞我的程序,而是形成循环的一部分(因此按顺序检查)

我的脑袋说:要么找到一种方法在非阻塞模式下运行iNotify,要么找到线程iNotfiy

我尝试了非阻塞方式,并使用以下命令为我的iNotify实例禁用了O_NONBLOCK:

fcntl (fd, F_SETFL, fcntl (fd, F_GETFL) | O_NONBLOCK);
但是,当我这样做,然后尝试:

length = read(fd, buffer, BUF_LEN);
它不断告诉我,对于read,资源暂时不可用

有谁能给我一些关于如何实现我想做的事情的建议吗?不需要是这种方法,但我需要的功能,因为我正在编辑一个文本文件与一个Web服务器,并希望阅读修改到我的C++程序,以更新变量。 提前谢谢

EAGAIN
(资源暂时不可用)是当文件描述符设置为非阻塞模式时,如果正在读取的文件描述符上没有可用数据,则预期的错误状态。因为您使用的是轮询循环,所以可以在下一次迭代中再次尝试读取

或者,您可以尝试对文件描述符使用信号驱动的I/O通知:

自Linux 2.6.25以来,信号驱动的I/O通知可用于
inotify
文件描述符;参见
fcntl(2)
中关于
F_SETFL
(设置
O_ASYNC
标志)、
F_SETOWN
F_SETSIG
的讨论。传递给信号处理程序的
siginfo\u t
结构(如
sigaction(2)
所述)设置了以下字段:
si\u fd
设置为
inotify
文件描述符编号
SIU signo
设置为信号号
si_code
设置为
POLL_IN
;而
POLLIN
设置在si_波段