我想使用php的pecl扩展并使用inotify_read()函数来检测文件中的更改。
作为一个故障保护,我想为inotify_read函数指定一个超时值,这样我就不会永远阻止阻塞,以防一个事件被引发并被遗漏。
有没有人知道如何使用stream_select函数来阻止指定的秒数,但如果在inotify_read上引发了事件,则立即返回。
我知道有办法执行inotify_read非阻塞,但我不想坐在那里进行民意调查,而且我不希望文件更改发生时与我收到通知之间的延迟通过它。
我能够使用pcntl_alarm来中断系统调用,但我希望不那么强烈。
答案 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
}