有人可以说,为什么以下代码会在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);
答案 0 :(得分:3)
使用输入和输出缓冲区实现管道。 cat
开始读取,并将所有内容复制到输出中。当输出缓冲区已满时,其写入将被阻止。
由于没有任何内容正在阅读cat
的输入(因为永远不会到达该行),因此它会无限期阻止,阻止您的fwrite
。