Como os arquivos são abertos no unix?

2

Qual é o processo interno de abrir um arquivo?

Para abrir um arquivo, o sistema converte o nome do caminho para o inode e, a partir da busca do inode, a parte do disco do driver correspondente para procurar pelo conteúdo do arquivo? É isso? Eu só tenho uma vaga noção do processo de abertura de um arquivo, mas eu quero mais detalhes.

    
por Gilles 07.06.2014 / 00:26

1 resposta

1

Geralmente você deve ler um livro como este para obter respostas para a maioria dos detalhes dentro do kernel. Mas, em geral, sim, o processo é esse:

  1. O sistema de arquivos é atravessado usando o caminho especificado, desde a raiz do processo (pode diferir da raiz conhecida do FS do sistema devido a chroot , jail , LXC e análogos) no caso de um caminho absoluto ou diretório do processo atual ou do diretório especificado (em chamadas como openat ), ambos no caso de caminho relativo. O caminho especificado é dividido em seqüência de componentes do caminho, que são processados em seqüência. O conteúdo do diretório e os cruzamentos dos pontos de montagem são analisados durante esse processo (chamado "lookup path", "namei lookup") e cada componente do caminho resulta em uma referência temporária a vnode ( sfile em Unixes antigos, inode no Linux) objeto. Como resultado, se isso for bem-sucedido, o vnode do arquivo final será localizado (criado, se necessário) e suspenso.
  2. O objeto "Abrir arquivo" é criado, fazendo referência a esse vnode e anexado ao processo ' file descriptor , alocado para essa solicitação.

Os detalhes da pesquisa de diretório para isso são muito específicos para o VFS específico. Pode ser de qualquer tipo, incluindo aqueles somente de memória ( tmpfs ), aqueles baseados em disco ( ext4 , etc.), mas o conceito comum de hierarquia de diretórios é mantido em vigor.

    
por 07.06.2014 / 14:28