2016-05-31 73 views
3

任何人都可以說,爲什麼下面的代碼掛在fwrite($pipes[0], $data);上,但是當我將$bytesCount更改爲例如1000時,它不會掛起?php - > fwrite處理管道掛起 - >爲什麼?

我是不是能夠通過谷歌找到答案:(
謝謝。

$descriptorspec = array(
    0 => array("pipe", "r"), 
    1 => array("pipe", "w") 
); 

$bytesCount = 1000000; 
$process = proc_open('cat', $descriptorspec, $pipes); 
$data = str_repeat('a', $bytesCount); 
fwrite($pipes[0], $data); 
fclose($pipes[0]); 
$response = stream_get_contents($pipes[1]); 
fclose($pipes[1]); 
$return_value = proc_close($process); 
+0

如果你使用帶有第三個參數的'fwrite',然後'fflush'這個流,重複這個幾次? –

+0

@AurelBílý不,它不) –

回答

3

管道與輸入和輸出緩衝器。cat開始讀取,並複製到所有的輸出,當輸出緩衝區已滿,其寫入被阻止。

因爲沒有什麼是閱讀cat的輸入(如從未達到該行),它將無限期阻塞,阻止您fwrite

+0

是的,你是對的,謝謝。 如果我在每次寫入標準輸入之後從進程標準輸出讀取數據 - 按預期工作。 –