Quando um shell executa um comando / programa externo - esse programa possui descritores de arquivo?

1

Há muitos documentos e discussões sobre os descritores de arquivos de shells e como esses descritores de arquivos podem ser manipulados para redirecionamento etc.
Minha pergunta é, quando um comando shell é um programa externo, como rsync , cat , curl etc, esses comandos têm descritores de arquivo da mesma forma que o shell faz?
Para dar um exemplo concreto, se eu executar este comando em um terminal

% cat << EOF | php
<?php
echo "hello". PHP_EOL;
echo "another line" . PHP_EOL;
EOF

Estou assumindo que o conteúdo deste heredoc está sendo alimentado para STDIN, mas de qual processo? o shell, ou cat tem um descritor de arquivo 0 e o conteúdo do heredoc está sendo alimentado para cat ' fd0 diretamente?

    
por the_velour_fog 21.05.2016 / 04:51

1 resposta

1

Vamos começar dizendo que toda a E / S, seja baseada em arquivos, interativa ou de qualquer outra forma, requer descritores de arquivos exclusivos para cada.

A padronização de descritores de arquivos interativos é o que permite o redirecionamento e a canalização.

O shell é especialista em manipulações de E / S padrão.

No seu exemplo, cat é chamado com seu STDIN configurado para a saída do shell representando seu script HEREDOC (enviado por meio de popen() ) e com seu STDOUT canalizado (com popen ()) para php 's STDIN. A saída de php não está sendo redirecionada, aponte para o STDOUT inicial do shell.

    
por 21.05.2016 / 05:53

Tags