Duplicação de descritores de arquivos no redirecionamento

3

De link

Bash handles several filenames specially when they are used in redirections, as described in the following table:

/dev/fd/fd If fd is a valid integer, file descriptor fd is duplicated.

/dev/stdin File descriptor 0 is duplicated.

/dev/stdout File descriptor 1 is duplicated.

/dev/stderr File descriptor 2 is duplicated.

o que "duplicado" significa aqui? Você pode dar alguns exemplos?

    
por Tim 08.12.2015 / 00:19

1 resposta

7

Redirecionamentos são implementados através da família de funções do sistema dup . dup é a abreviatura de duplicação e quando você faz, por exemplo:

3>&2

você duplica ( dup2 ) filedescritor 2 no filedescriptor 3, possivelmente fechando o filedescriptor 3 se já estiver aberto (o que não fará nada com seu processo pai, porque isso acontece em um filho fork ed off (se isso não acontece (redirecionamentos nas funções do shell em certos contextos), o shell fará com que pareça que sim).

Quando você faz:

1<someFile

será open someFile em um novo descritor de arquivo (é o que normalmente faz o open syscall) e então dup2 desse filedescriptor em 1.

O que o manual diz é que, se um dos arquivos dev especiais listados tomar o lugar de someFile , o shell pulará a etapa open -on-a-new-fd e, em vez disso, irá diretamente para dup2 o filedescriptor correspondente (isto é, 1 para / dev / stdout, etc.) no destino (filedescriptor no lado esquerdo do redirecionamento).

    
por 08.12.2015 / 00:35