当文件io打开的流被阻塞时会发生什么?

问题描述:

这里考虑的代码片段:当文件io打开的流被阻塞时会发生什么?

$handle = popen("some command that generates an infinite stream of output to stdout", "r"); 

while ($line = fgets($handle)) { 
    echo $line; 
    sleep(3); 
} 

我的问题是:什么是睡眠(3),并通过popen方法的命令()仍然喷涌输出过程中实际发生的?这是缓冲到PHP的内存?

输出是否有机会被破坏?

这取决于操作系统。数据可能会被缓冲,另一个程序的输出调用可能会被阻止,或者其某些组合。

+0

数据是否有机会被丢弃? – Tim 2012-08-02 23:35:06

+0

只有当程序禁止输出阻塞并且不会重试。 – 2012-08-02 23:36:13

+0

我们如何知道popen的程序是否会被阻塞?我问,因为我想popen一个网络流量分析器,所以如果它被阻止,它会错过数据 – Tim 2012-08-02 23:37:02