Os redirecionamentos operam em descritores de arquivos ou em identificadores de arquivos?

3

Em link

Before a command is executed, its input and output may be redirected using a special notation interpreted by the shell. Redirection allows commands’ file handles to be duplicated, opened, closed, made to refer to different files, and can change the files the command reads from and writes to. Redirection may also be used to modify file handles in the current shell execution environment.

No entanto, o texto a seguir no link mostra que os redirecionamentos operam em descritores de arquivos (que são números inteiros).

Identificadores de arquivo e descritores de arquivo são diferentes. A partir do link , as alças de arquivos são estruturas de dados de FILE na biblioteca padrão C. Os descritores de arquivos são objetos em sistemas operacionais Unix e Unix.

O que significa o manual do bash por "identificadores de arquivo" na cotação?

    
por Tim 08.12.2015 / 01:12

2 respostas

3

A documentação do Bash está usando o termo 'file handle' como sinônimo de 'file descriptor'.

Não há necessidade de os programas usarem a Biblioteca Padrão de C para E / S. Obviamente, se o fizerem, eles podem usar fdopen() para obter um (ponteiro para a) FILE estrutura de um dos descritores de arquivo.

    
por 10.12.2015 / 17:48
2

(Em um sistema Linux) Se você escrever:

ls -l /proc/$$/fd

Ele irá escrever a lista de fd (descritores de arquivos) aberta:

lrwx------ 1 user user 64 dic  8 00:06 0 -> /dev/pts/12
lrwx------ 1 user user 64 dic  8 00:06 1 -> /dev/pts/12
lrwx------ 1 user user 64 dic  8 00:06 2 -> /dev/pts/12
lrwx------ 1 user user 64 dic  8 00:06 255 -> /dev/pts/12

Esses são também chamados de "file handles" .

Como você pode ver, os números são 0,1,2. Esses são os mesmos que stdin (0), stdout (1), stderr (2).

Assim, o trabalho de redirecionamento com esses números (como > & 2) e alguns novos números poderiam ser criados (como > & 18).

Esses descritores de arquivo também podem ser acessados por outros nomes mais antigos, como: / dev / stdout, / dev / fd1 ou outros.

A Wikipédia tem uma boa descrição razoável

    
por 08.12.2015 / 05:25