Esses arquivos são na verdade chamados stdin
, stdout
e stderr
. O caractere @
é adicionado por ls
para informar que eles são links simbólicos . ls -l
revelaria que os destinos desses links simbólicos são /proc/self/fd/0
, /proc/self/fd/1
e /proc/self/fd/2
.
/proc
é um sistema de arquivos virtual fornecido pelo kernel que mostra informações sobre o sistema operacional. Entre outras coisas, há diretórios como /proc/1234
que contêm informações sobre o processo com o ID 1234. /proc/self
é um link simbólico para o diretório de qualquer processo que esteja acessando-o (o kernel retorna um destino diferente para diferentes processos). / p>
/proc/self/fd
(que também é um link simbólico para /dev/fd
) contém uma entrada por arquivo que o processo abriu. Cada entrada corresponde a um descritor de arquivo e é um link simbólico para o arquivo (se possível - para pipes, soquetes e arquivos excluídos, o link simbólico fornece informações úteis para a depuração, mas não aponta para um arquivo que você pode reabrir pelo nome) . Esses descritores de arquivo são os mesmos que você manipula com funções C, como open
, close
, dup
, read
, write
, etc. Eles não são usados pela C funções, são outras formas de interagir com os mesmos objetos.
O motivo /dev/stdin
e amigos existem é que às vezes um programa requer um nome de arquivo, mas você quer dizer para ele usar um arquivo que já está aberto (um pipe, por exemplo). Então você pode passar /dev/stdin
para dizer ao programa para ler sua entrada padrão.
Leitura adicional: