O que e por quê? - Descritores de arquivos [fechados]

2

O que é um descritor de arquivo? Por que precisamos deles?

    
por Joey 28.12.2014 / 21:35

2 respostas

7

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?

    
por 29.12.2014 / 01:07
5

They are represented by an int

Sim, eles são numerados a partir de zero, o que é um meio comum e direto de contabilizar itens exclusivos de um tipo semelhante. Tipo de camisas esportivas. Por exemplo, pode haver vários goleiros em uma equipe, mas você sabe qual deles está em jogo em determinado ponto, pois cada membro da equipe tem um número exclusivo. Esse é o único significado.

what is a file descriptor?

Refere-se a um canal de entrada / saída. Normalmente eles são apenas um ou outro, mas talvez ambos.

Every file has three of them

Geralmente todo processo possui pelo menos três deles, este é um recurso dos SOs de estilo * nix.

Why do we need them?

Você não precisa deles, a menos que queira fazer uma entrada / saída para algo diferente do processo atual. No entanto, o "você" em tal processo seria abstrato no sentido de "eu escrevi isso", já que ninguém, incluindo você, provavelmente fará uso significativo dele. Os processos não existem em um vazio, eles são entidades gerenciadas pelo sistema operacional e precisam interagir com outras entidades, acessar arquivos, dispositivos de hardware, etc. Os descritores de arquivos são um meio fundamental para fazê-lo.

Why can't I just say hey I want to write to stdin, or to stdout?

Dependendo do contexto, você pode, obviamente. Em C, estas são (ostensivamente) macros que levam de volta ao descritor de baixo nível correspondente (dê uma olhada em stdio.h ...). Se você inserir erros no WRT, você sempre poderá, por exemplo:

export stdin=0
export stdout=1

Embora isso provavelmente não seja uma boa idéia, já que você corre o risco de ser pego no namespace global de alguma forma possivelmente infeliz. Além disso, stdin demora mais para digitar do que 0 ;).

    
por 28.12.2014 / 22:51