2012-08-02 48 views
1

這裏考慮的代碼片段:當文件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的內存?

輸出是否有機會被破壞?

回答

1

這取決於操作系統。數據可能會被緩衝,另一個程序的輸出調用可能會被阻止,或者其某些組合。

+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

相關問題