php inotify阻塞但超时
我想使用php的pecl扩展名,并使用inotify_read()函数来检测文件中的更改 作为一个故障保护,我想为inotify_read函数指定一个超时值,这样我就不会永远阻塞,以防引发并错过事件 是否有人知道如何使用stream_select函数阻止指定的秒数,但如果在inotify_读取时引发事件,则立即返回 我知道有一种方法可以执行inotify_读取非阻塞,但我不想坐在那里进行轮询,也不想在文件更改发生时与收到通知时之间出现延迟php inotify阻塞但超时,php,blocking,inotify,Php,Blocking,Inotify,我想使用php的pecl扩展名,并使用inotify_read()函数来检测文件中的更改 作为一个故障保护,我想为inotify_read函数指定一个超时值,这样我就不会永远阻塞,以防引发并错过事件 是否有人知道如何使用stream_select函数阻止指定的秒数,但如果在inotify_读取时引发事件,则立即返回 我知道有一种方法可以执行inotify_读取非阻塞,但我不想坐在那里进行轮询,也不想在文件更改发生时与收到通知时之间出现延迟 我可以使用pcntl_alarm来中断系统调用,但我希望
我可以使用pcntl_alarm来中断系统调用,但我希望不会太激烈。看起来像是pecl inotify_init()函数在底层文件描述符周围返回一个php_流包装器。因此,是的,您应该能够使用stream_select()来等待某些东西向inotify描述符发送信号 类似于以下的方法应该可以工作:
$in = inotify_init();
stream_set_blocking($in, false); // probably a good idea to make it non-blocking
$r = array($in);
$timeout = 10;
$n = stream_select($r, $w = array(), $e = array(), $timeout);
if ($n == 0) {
// Timed out, so do something else
} else {
// We know that inotify_read will not block; use it and process
// the results
}
感谢您解释如何使用文件描述符-您应该将代码添加到php手册页!