【问题标题】:php inotify blocking but with timeoutphp inotify 阻塞但超时
【发布时间】:2014-06-04 20:11:39
【问题描述】:

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

作为故障保险,我想为 inotify_read 函数指定一个超时值,这样我就不会永远阻塞,以防引发和错过事件。

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

我知道有办法执行 inotify_read 非阻塞,但我不想坐在那里轮询,我不希望文件更改发生与我收到通知之间的延迟靠它。

我能够使用 pcntl_alarm 来中断系统调用,但我希望能得到一些不那么强烈的东西。

【问题讨论】:

    标签: php blocking inotify


    【解决方案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
    }
    

    【讨论】:

    • 感谢您解释如何使用文件描述符 - 您应该将代码添加到 php 手册页!
    猜你喜欢
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多