Como o redirecionamento é implementado?

0

O redirecionamento é um conceito do shell, não do kernel do SO?

Como o redirecionamento é implementado em termos de chamadas do sistema?

O redirecionamento é implementado de forma semelhante ao pipe?

    
por Tim 11.04.2016 / 02:16

2 respostas

2

"redirecionamento" é um conceito do shell, e os detalhes em torno dele dependem de qual shell você está falando.

No entanto, pode-se dizer que a base para o redirecionamento se baseia na noção de que os programas têm descritores de arquivos de entrada e saída pré-abertos quando iniciados, o que remete a como funciona a função execve . Ou seja, o processo filho herda os descritores de arquivos abertos.

Assim, para iniciar um filho (um comando), o processo pai (isto é, o shell) será o primeiro bifurcado para o filho, então configure as extremidades apropriadas do pipe para a entrada e saída da criança (descirptores de arquivo 0, 1 e 2), e deixe a criança herdá-la quando executada via execve .

Sim, são canos.

    
por 11.04.2016 / 04:09
2

Para redirecionamento, eu diria que isso (redirecionamento) é implementado pelo shell substituindo stdin (por entrada para < input) e stdout (por saída para > output) usando dup2 () -

  1. arquivos abertos para entrada e saída in = open () out = open ()
  2. dup2 (in, 0) // substitui o arquivo de entrada por stdin
  3. dup2 (out, 1) // substitui o arquivo de saída por stdout
  4. close (in)
  5. fechar (sair)
  6. exec ()

Para pipe, a chamada do sistema pipe (2) é usada de maneira similar - isso tem uma leitura e um final de gravação. Cada comando que está conectado através do pipe leria de uma extremidade de um pipe e gravaria na outra extremidade. stdin, stdout irá substituir a extremidade correspondente do pipe para esse comando.

    
por 11.04.2016 / 06:19