Qual é a relação entre a saída de um programa, a saída padrão e seus descritores de arquivo?

3

Vamos supor que estou executando wget , que está baixando algo. Ele está imprimindo algum texto para o meu terminal e grava os dados baixados em um arquivo.

Do ponto de vista da terminologia, qual é a diferença entre o arquivo baixado e as informações que aparecem no console? O que isso depende de que consideramos algo como "saída padrão" em vez de "saída"?

Who / What decide se alguma saída está acessível via /proc/self/fd/1 ou por outros meios (arquivo no sistema de arquivos, janela de um programa GUI, etc.)?

    
por dash17291 25.01.2014 / 19:50

1 resposta

2

Existe saída padrão (1), saída de erro (2) e entrada (0). Estes são os descritores de arquivos padrão:

tweedleburg:~ $ cat &
[1] 13089

[1]+  Stopped                 cat
tweedleburg:~ $ cd /proc/$!
tweedleburg:/proc/13089 $ cd fd
tweedleburg:/proc/13089/fd $ ls
0  1  2

Agora o programador pode abrir arquivos e cada abertura de arquivo fornece um descritor de arquivo (para mais informações link ). Agora vamos ver isto:

tweedleburg:~ $ wget www.linuxintro.org
[...]
2014-01-25 20:43:30 (157 KB/s) - ‘index.html’ saved [19928]

Aqui o programador wget decidiu abrir um arquivo (neste caso index.html) para escrever. Ele tem algum número como descritor de arquivo, mas certamente não 0, 1 ou 2. Os dados da internet estão escritos nisto. O programador do wget também decidiu que a linha "salva" seria gravada no fluxo de saída de erro. Eu posso entender isso como wget tem ou pode obter um parâmetro que despeja todos os dados para o fluxo de saída padrão. Então, não deve ser misturado com informações de status.

É por isso que existem dois fluxos de saída, padrão para dados e erro para mensagens de erro / status. Eu blogo sobre isso aqui: link .

Agora, para redirecionar a saída de erro, use o código 2 > operador, para saída padrão você usa o 1 > ou > operador:

tweedleburg:~ $ wget >/dev/null
wget: missing URL
Usage: wget [OPTION]... [URL]...

Try 'wget --help' for more options.
tweedleburg:~ $ wget 2>/dev/null
tweedleburg:~ $

você vê - no segundo exemplo, as mensagens de erro são suprimidas:)

    
por 25.01.2014 / 20:51