php inotify阻止但超时

时间:2014-06-04 20:11:40

标签: php blocking inotify

我想使用php的pecl扩展并使用inotify_read()函数来检测文件中的更改。

作为一个故障保护,我想为inotify_read函数指定一个超时值,这样我就不会永远阻止阻塞,以防一个事件被引发并被遗漏。

有没有人知道如何使用stream_select函数来阻止指定的秒数,但如果在inotify_read上引发了事件,则立即返回。

我知道有办法执行inotify_read非阻塞,但我不想坐在那里进行民意调查,而且我不希望文件更改发生时与我收到通知之间的延迟通过它。

我能够使用pcntl_alarm来中断系统调用,但我希望不那么强烈。

1 个答案:

答案 0 :(得分:1)

看起来pecl inotify_init()函数返回基础文件描述符周围的php_stream包装器。所以,是的,您应该能够使用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
}