descritor de Ficheiros

actualizado: 03/13/2021 by Computer Hope

descritores de Ficheiros ilustração

um descritor de ficheiros é um número que identifica unicamente um ficheiro aberto no sistema operativo de um computador. Ele descreve um recurso de dados, e como esse recurso pode ser acessado.

Quando um programa pede para abrir um arquivo — ou outro recurso de dados, como um socket de rede-o kernel:

  1. concede acesso.
  2. cria um item na tabela de ficheiros global.
  3. fornece ao software a localização desse item.

o descritor é identificado por um número inteiro não negativo único, como 0, 12 ou 567. Existe pelo menos um descritor de arquivo para cada arquivo aberto no sistema.

descritores de arquivos foram usados pela primeira vez em Unix, e são usados por sistemas operacionais modernos, incluindo Linux, macOS e BSD. No Microsoft Windows, os descritores de arquivos são conhecidos como pegas de arquivos.

visão geral

quando um processo faz um pedido bem sucedido para abrir um arquivo, o kernel retorna um descritor de arquivo que aponta para uma entrada na tabela de arquivos globais do kernel. A entrada da tabela de arquivos contém informações como o inode do arquivo, offset byte, e as restrições de Acesso para esse fluxo de dados (apenas leitura, write-only, etc.).

file descriptor diagram

Stdin, stdout, and stderr

em um sistema operacional Unix-like, os três primeiros descritores de arquivo, por padrão, são STDIN (standard input), STDOUT (standard output), e STDERR (standard error).

Nome do Arquivo do descritor Descrição Abreviatura
Padrão de entrada 0 O padrão de fluxo de dados para a entrada, por exemplo, em um pipeline de comando. No terminal, isto é por omissão a entrada do teclado do utilizador. stdin
saída padrão 1 o fluxo de dados padrão para a saída, por exemplo quando um comando imprime texto. No terminal, este padrão é a tela do Usuário. stdout
erro padrão 2 o fluxo de dados padrão para a saída que se relaciona com um erro que ocorreu. No terminal, este padrão é a tela do Usuário. stderr

Redirecionamento de descritores de arquivo

descritores de Arquivo pode ser diretamente acessado utilizando o bash, o shell padrão do Linux, macOS X, e o Subsistema do Windows para o Linux.

por exemplo, quando você usa o comando find, o resultado bem sucedido vai para stdout (descritor de Arquivo 1), e as mensagens de erro vão para stderr (descritor de Arquivo 2). Ambos os fluxos mostram como resultado terminal:

find / -name '*something*'
/usr/share/doc/something/usr/share/doc/something/examples/something_randomfind: `/run/udisks2': Permission deniedfind: `/run/wpa_supplicant': Permission denied/usr/share/something/usr/games/something

estamos a obter erros porque o find está a tentar procurar em algumas pastas do sistema que não temos permissão para ler. Todas as linhas que dizem “Permissão negada” foram escritas para stderr, e as outras linhas foram escritas para stdout.

Você pode ocultar stderr, redirecionando o arquivo de descritor de 2 para /dev/null, o dispositivo especial para o Linux, que “sai do lugar”:

find / -name '*something*' 2>/dev/null
/usr/share/doc/something/usr/share/doc/something/examples/something_random/usr/share/something/usr/games/something

Os erros enviados para /dev/null, e não são exibidos.

compreender a diferença entre stdout e stderr é importante quando você quer trabalhar com a saída de um programa. Por exemplo, se você tentar grep o resultado do comando find, você vai notar que as mensagens de erro não são filtradas, porque apenas o resultado padrão é encaminhado para grep.

find / -name '*something*' | grep 'something'
/usr/share/doc/something/usr/share/doc/something/examples/something_randomfind: `/run/udisks2': Permission deniedfind: `/run/wpa_supplicant': Permission denied/usr/share/something/usr/games/something

no Entanto, você pode redirecionar o erro padrão para a saída padrão e, em seguida, grep irá processar o texto de ambos:

find / -name '*something*' 2>&1 | grep 'something'
/usr/share/doc/something/usr/share/doc/something/examples/something_random/usr/share/something/usr/games/something

Observe que no comando acima, o destino do arquivo descritor (1) é prefixado com um ” e ” comercial (“&”). Para mais informações sobre o redirecionamento do fluxo de dados, consulte pipelines na shell bash.

para exemplos de criação e utilização de descritores de ficheiros na bash, veja os nossos exemplos de comandos de compilação exec.tratamento de Ficheiros, termos do sistema operativo

Deixe uma resposta

O seu endereço de email não será publicado.