Um descritor de arquivo é um número que representa um arquivo aberto em um processo. É uma maneira de o programa lembrar qual arquivo está manipulando. Abrir um arquivo procura por um número livre e o atribui ao arquivo na tabela do descritor de arquivos do processo; fechar o arquivo remove a entrada da tabela de descritores do processo. Não há relação entre o descritor de arquivo n em um processo e o descritor de arquivo com o mesmo número em outro processo.
“Cada arquivo tem três deles (stdin, stdout, stderr)” é um disparate. Processos possuem descritores de arquivos, não arquivos. Os processos podem e geralmente possuem mais de três descritores de arquivos e podem ter menos. Stdin, stdout e stderr são os nomes dos descritores de arquivo 0, 1 e 2 porque têm um significado convencional: stdin (entrada padrão) é onde o programa deve ler a entrada do usuário (se quiser), stdout (saída padrão) é onde o programa deve gravar os dados que produz (se quiser), e stderr (erro padrão) é para mensagens de erro. Stdin e stdout são úteis em programas destinados a serem usados nas linhas de comando e especialmente em pipelines; Convido-o a ler o que se entende por conexão STDOUT e STDIN? e (mais avançado) Como um comando pode ter mais de uma saída?