php - > fwrite来处理管道挂起 - >为什么呢?

时间:2016-05-31 17:40:37

标签: php pipe fwrite

有人可以说,为什么以下代码会在fwrite($pipes[0], $data);上挂起,但是当我将$bytesCount更改为1000时,它不会挂起?

我无法通过谷歌找到答案:(
谢谢。

$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);

1 个答案:

答案 0 :(得分:3)

使用输入和输出缓冲区实现管道。 cat开始读取,并将所有内容复制到输出中。当输出缓冲区已满时,其写入将被阻止。

由于没有任何内容正在阅读cat的输入(因为永远不会到达该行),因此它会无限期阻止,阻止您的fwrite