Начнем с того, что все операции ввода-вывода, будь то файловые, интерактивные или любые другие, требуют уникальных файловых дескрипторов для каждого.
Стандартизация дескрипторов интерактивных файлов - это то, что позволяет осуществлять перенаправление и конвейеризацию.
Оболочка является экспертом в стандартных манипуляциях ввода-вывода.
В вашем примере, cat
вызывается с его STDIN, установленным на вывод оболочки, представляющий ваш сценарий HEREDOC (переданный через popen()
), и с его STDOUT, переданным (с помощью popen()) на STDIN php
. php
, вывод которого не перенаправляется, указывает на исходный STDOUT оболочки.